Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2011 09:59:59

Slezhuk
От:
Зарегистрирован: 2011-10-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по кодировкам(UTF8 -> CP1251)

Добрый день!
Столкнулся с проблемой перекодировки текста из UTF-8 в CP1251.
Задача такая: получаем html страничку из интернета(страничка в UTF-8), парсим её, результат записываем в текстовый файл в CP1251.
Насколько я понимаю алгоритм должен выглядеть следующим образом:

>>>page = opener.open(url).read()
>>>chunk = re.findall('<htmltag>(.+?)</htmltag>', page, re.S)[0]
>>>chunkUTF8 = chunk.decode('UTF-8')
>>>chunkCP1251 = chunkUTF8.encode('CP1251')
И вот тут возникает ошибка:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/encodings/cp1251.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 7641-7642: character maps to <undefined>
Пробуем:
>>> error = chunkUTF8[7641:7642]
>>> error
u'\u3000'
Погуглив нашел, что это некий ‘IDEOGRAPHIC SPACE’.
Попробовал так:
>>>chunkUTF8fix = chunkUTF8fix.replace(u'\u3000', ' ')
>>>chunkCP1251 = chunkUTF8fix.encode('CP1251')
В этот раз получилось. Хотя мне такой способ кажется достаточно сильно притянутым за уши. Подскажите- есть ли более надежный способ отлавливать такие “волшебные” символы?



Офлайн

#2 Окт. 28, 2011 10:08:16

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Вопрос по кодировкам(UTF8 -> CP1251)

>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'

Офлайн

#3 Окт. 28, 2011 10:31:32

Slezhuk
От:
Зарегистрирован: 2011-10-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по кодировкам(UTF8 -> CP1251)

Спасибо большое за быстрый ответ!
Даже не ожидал, что все может быть так просто, ведь можно было обойтись help(''.encode) :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version