Isem
Янв. 21, 2011 17:16:04
>>> 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') )
alucardmc
Янв. 21, 2011 20:23:39
я так и делаю, говорю что он раскодирует если часть документа брать, но если весь, то там попадается символ который он не может раскодировать.
Читал на форуме кто то обошел эту проблему отредактировав cp1251.py, какие изменения нужно туда внести?
o7412369815963
Янв. 21, 2011 20:55:13
давай кусок кода где страницу загружаешь и декодируешь
alucardmc
Янв. 21, 2011 20:58:31
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') #тут все обрывается
Андрей Светлов
Янв. 21, 2011 21:17:49
Что же вы голову морочите?
“Обрывается” то у вас на print(), а не на decoding from cp1251.
Исходники Питона править не нужно. Баг - в ваших руках/голове.
alucardmc
Янв. 21, 2011 21:40:05
мда, скопировал код и создал в новом файле(дабы потестить, без всяких лишних действий, только это - загрузка и сохранение в self.html) и без всяких проблем, запускаю старый вылетает ошибка…
alucardmc
Янв. 21, 2011 21:42:33
нет, принт это я после добавил
Андрей Светлов
Янв. 21, 2011 21:44:53
для “посмотреть” хватило бы print(self.html.encode('cp866', ‘replace’))
alucardmc
Янв. 21, 2011 21:51:44
все таки проблема была в headers, в старом коде они были немного другие поэтому вылетала ошибка