Stofel
Март 28, 2009 16:16:23
На вход в программу поступают строки. (Темы почтовых сообщений)
в 95% их случаев удается перекодировать.
А остальные вызывают эксепшоны в самых неожиданных местах.
Как сделать чтобы после попытки перекодировки строка пусть кракозябрами но
успешно ложилась бы БД, в лог и т.д. ?
Python 2.5
crchemist
Март 28, 2009 16:23:19
Певно хтось шось ліпше порадить, Але можна repr викликати - мав би помогти
>>> type(repr(u'абракадабра'))
<type 'str'>
>>>
Stofel
Март 28, 2009 16:43:00
языковой барьер однако..
приходит строка в неизвестной кодировке, а уходить должна в БД в бд utf-8 в логи в koi8-r
в вышесоящую программу в cp1251 через url.
проверку типа я делаю, ошибка возникает при перекодировке либо при побытке положить в бд или в логи или перекодировке в url.
Наиболее частые Ексершены могу выложить попозже.
Александр Кошелев
Март 28, 2009 17:29:14
Очевидный и разумный вариант, это чтобы ваша программа оперировала однообразными строками. Лучше переводить все поступающие извне данные в уникод, работать с уникодом внутри программы, и при сохранение куда-то уже конвертировать в байты в нужной кодировке.
igor.kaist
Март 29, 2009 12:22:37
Daevaorn, у топикстартера похоже проблема с тем, что он не знает, в какой кодировке приходит вложение…
Stofel
Как сделать чтобы после попытки перекодировки строка пусть кракозябрами но
успешно ложилась бы БД, в лог и т.д. ?
типа этого возможно:
a=unicode(string,'koi8-r',errors='ignore' ) # или errors='replace'
pyuser
Март 29, 2009 15:50:54
Можно попробовать 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
Март 29, 2009 17:05:42
Спасибо за ответы!
Они помогли мне понять что надо все писать заново :)