Найти - Пользователи
Полная версия: Вопрос по кодировкам(UTF8 -> CP1251)
Начало » Python для новичков » Вопрос по кодировкам(UTF8 -> CP1251)
1
Slezhuk
Добрый день!
Столкнулся с проблемой перекодировки текста из 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')
В этот раз получилось. Хотя мне такой способ кажется достаточно сильно притянутым за уши. Подскажите- есть ли более надежный способ отлавливать такие “волшебные” символы?
o7412369815963
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
Slezhuk
Спасибо большое за быстрый ответ!
Даже не ожидал, что все может быть так просто, ведь можно было обойтись help(''.encode) :)
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