Найти - Пользователи
Полная версия: UnicodeEncodeError: ... character '\u2013'
Начало » Python для экспертов » UnicodeEncodeError: ... character '\u2013'
1 2
Isem
>>> a = array.array( 'B', b"""5\xe9</a><span>&middot;</span>\n\n\t\n        <a href="http://auto.mail.ru/commo
n/policy.html">\xd3\xf1\xeb\xee\xe2\xe8\xff \xe8\xf1\xef\xee\xeb\xfc\xe7\xe2
\xe0\xed\xe8\xff \xec\xe0\xf2\xe5\xf0\xe8\xe0\xeb\xee\xe2</a><span>&middot;</spa""")
>>> a.tostring().decode('cp1251')
'5й</a><span>&middot;</span>\n\n\t\n <a href="http://auto.mail.ru/commo\nn/policy.html">Условия использв\nания материалов</a><span>&middot;</spa'
То есть

print( rhtml.decode('cp1251') )
alucardmc
я так и делаю, говорю что он раскодирует если часть документа брать, но если весь, то там попадается символ который он не может раскодировать.
Читал на форуме кто то обошел эту проблему отредактировав cp1251.py, какие изменения нужно туда внести?
o7412369815963
давай кусок кода где страницу загружаешь и декодируешь
alucardmc
headers = {
'User-Agent' : 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63',
'Host' : 'auto.mail.ru',
'Accept' : 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
'Accept-Language' : 'ru-RU,ru;q=0.9,en;q=0.8',
'Accept-Charset' : 'windows-1251, cp1251, *;q=0.1',
'Accept-Encoding' : 'txt, *;q=0',
'Connection' : 'Keep-Alive, TE',
'TE' : 'deflate, gzip, chunked, identity, trailers'
}

opener = urllib.request.build_opener()
req = urllib.request.Request(self.eturl, None, headers)

try:
page = opener.open(req);
except IOError as err:
print('error: ', err)
if page:
rhtml = page.read()
self.html = str(rhtml, 'cp1251') #тут все обрывается
Андрей Светлов
Что же вы голову морочите?
“Обрывается” то у вас на print(), а не на decoding from cp1251.

Исходники Питона править не нужно. Баг - в ваших руках/голове.
alucardmc
мда, скопировал код и создал в новом файле(дабы потестить, без всяких лишних действий, только это - загрузка и сохранение в self.html) и без всяких проблем, запускаю старый вылетает ошибка…
alucardmc
нет, принт это я после добавил
Андрей Светлов
для “посмотреть” хватило бы print(self.html.encode('cp866', ‘replace’))
alucardmc
все таки проблема была в headers, в старом коде они были немного другие поэтому вылетала ошибка
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