Найти - Пользователи
Полная версия: Принципы работы с разными кодировками строк
Начало » Python для новичков » Принципы работы с разными кодировками строк
1
Stofel
На вход в программу поступают строки. (Темы почтовых сообщений)
в 95% их случаев удается перекодировать.
А остальные вызывают эксепшоны в самых неожиданных местах.
Как сделать чтобы после попытки перекодировки строка пусть кракозябрами но
успешно ложилась бы БД, в лог и т.д. ?

Python 2.5
crchemist
Певно хтось шось ліпше порадить, Але можна repr викликати - мав би помогти
>>> type(repr(u'абракадабра'))
<type 'str'>
>>>
Stofel
языковой барьер однако..

приходит строка в неизвестной кодировке, а уходить должна в БД в бд utf-8 в логи в koi8-r
в вышесоящую программу в cp1251 через url.
проверку типа я делаю, ошибка возникает при перекодировке либо при побытке положить в бд или в логи или перекодировке в url.


Наиболее частые Ексершены могу выложить попозже.
Александр Кошелев
Очевидный и разумный вариант, это чтобы ваша программа оперировала однообразными строками. Лучше переводить все поступающие извне данные в уникод, работать с уникодом внутри программы, и при сохранение куда-то уже конвертировать в байты в нужной кодировке.
igor.kaist
Daevaorn, у топикстартера похоже проблема с тем, что он не знает, в какой кодировке приходит вложение…
Stofel
Как сделать чтобы после попытки перекодировки строка пусть кракозябрами но
успешно ложилась бы БД, в лог и т.д. ?
типа этого возможно:
a=unicode(string,'koi8-r',errors='ignore' ) # или errors='replace'
pyuser
Можно попробовать chardet (chardet.feedparser.org)
import chardet

from encodings import normalize_encoding
from encodings.aliases import aliases

def decode_message (msg) :
if not isinstance(msg, unicode) :
enc = chardet.detect(msg)['encoding']
enc = aliases[normalize_encoding(enc)]
return msg.decode(enc)
return msg
Stofel
Спасибо за ответы!
Они помогли мне понять что надо все писать заново :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB