Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2009 16:16:23

Stofel
От:
Зарегистрирован: 2009-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

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

Python 2.5



Офлайн

#2 Март 28, 2009 16:23:19

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

Певно хтось шось ліпше порадить, Але можна repr викликати - мав би помогти

>>> type(repr(u'абракадабра'))
<type 'str'>
>>>



Офлайн

#3 Март 28, 2009 16:43:00

Stofel
От:
Зарегистрирован: 2009-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

языковой барьер однако..

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


Наиболее частые Ексершены могу выложить попозже.



Офлайн

#4 Март 28, 2009 17:29:14

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

Очевидный и разумный вариант, это чтобы ваша программа оперировала однообразными строками. Лучше переводить все поступающие извне данные в уникод, работать с уникодом внутри программы, и при сохранение куда-то уже конвертировать в байты в нужной кодировке.



Офлайн

#5 Март 29, 2009 12:22:37

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

Daevaorn, у топикстартера похоже проблема с тем, что он не знает, в какой кодировке приходит вложение…

Stofel
Как сделать чтобы после попытки перекодировки строка пусть кракозябрами но
успешно ложилась бы БД, в лог и т.д. ?
типа этого возможно:
a=unicode(string,'koi8-r',errors='ignore' ) # или errors='replace'



Офлайн

#6 Март 29, 2009 15:50:54

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

Можно попробовать 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



Отредактировано (Март 29, 2009 15:52:27)

Офлайн

#7 Март 29, 2009 17:05:42

Stofel
От:
Зарегистрирован: 2009-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Принципы работы с разными кодировками строк

Спасибо за ответы!
Они помогли мне понять что надо все писать заново :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version