Найти - Пользователи
Полная версия: Проблемы с decode
Начало » Python для новичков » Проблемы с decode
1
westyeast
Всем привет! При написании парсера столкнулся с такой проблемой

from urllib.request import urlopen
url = 'http://ya.ru/'
data = urlopen(url).read()
print(data.decode('utf-8', errors='ignore'))

Появляется ошибка:
UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\xa9’ in position 6711: character maps to <undefined>

Хотя передается параметр errors='ignore'

Если попробовать декодировать так:
print(b'\xa9SPAM'.decode('utf-8', errors='ignore'))
То никаких ошибок не возникает, и символ ‘\xa9’ вырезается.

В чем может быть причина, что не срабатывает errors='ignore' в первом случае?
tibs
westyeast,

Полагаю, что в юникоде есть какой-то символ, который не может быть выведен в консоль или в файл.

Можно попробовать сделать вывод в кодировке UTF-8 или другой. Например, так:

open('1.txt', 'wb').write(data.decode('utf8', errors='ignore').encode('utf8', errors='ignore'))

В этом случае все будет хорошо.
py.user.next
в третьем питоне можно определять кодировку страницы с помощью метода

>>> import urllib.request
>>> data = urllib.request.urlopen('http://python.su')
>>> data.headers.get_content_charset()
'utf-8'
>>>


westyeast
UnicodeEncodeError
это к методу .decode() отношения не имеет

пример
>>> b'\xb8'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte
>>>
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