Форум сайта python.su
>>> a = array.array( 'B', b"""5\xe9</a><span>·</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>·</spa""")
>>> a.tostring().decode('cp1251')
'5й</a><span>·</span>\n\n\t\n <a href="http://auto.mail.ru/commo\nn/policy.html">Условия использв\nания материалов</a><span>·</spa'
print( rhtml.decode('cp1251') )
Отредактировано (Янв. 21, 2011 17:19:53)
Офлайн
я так и делаю, говорю что он раскодирует если часть документа брать, но если весь, то там попадается символ который он не может раскодировать.
Читал на форуме кто то обошел эту проблему отредактировав cp1251.py, какие изменения нужно туда внести?
Офлайн
давай кусок кода где страницу загружаешь и декодируешь
Офлайн
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.
Исходники Питона править не нужно. Баг - в ваших руках/голове.
Офлайн
мда, скопировал код и создал в новом файле(дабы потестить, без всяких лишних действий, только это - загрузка и сохранение в self.html) и без всяких проблем, запускаю старый вылетает ошибка…
Офлайн
нет, принт это я после добавил
Офлайн
для “посмотреть” хватило бы print(self.html.encode('cp866', ‘replace’))
Офлайн
все таки проблема была в headers, в старом коде они были немного другие поэтому вылетала ошибка
Офлайн