2011-07-02 3 views
0

Вот мой код:Кодирование/декодирование работает в браузере, но не в терминале

import urllib 

print urllib.urlopen('http://www.indianexpress.com/news/heart-of-the-deal/811626/').read().decode('iso-8859-1') 

При просмотре страницы в Firefox, текст отображается правильно. Однако на терминале я вижу проблемы с кодировкой символов.

Вот некоторые деформированные примеры вывода:

 
long-term in 
Indias 
no-go areas 

Как я могу это исправить?

+0

Возможно, только ваш терминал не смог отобразить определенные наборы символов. * .decode ('iso-8859-1') предоставит вам объект unicode, но он не будет уверен, что ваш терминал может правильно отобразить его. –

ответ

0

Попробуйте это (игнорировать неизвестные символы)

import urllib 
url = 'http://www.indianexpress.com/news/heart-of-the-deal/811626/' 
print urllib.urlopen(url).read().decode('iso-8859-1').encode('ascii','ignore') 
0

Вы должны использовать фактическую кодировку sent by the server вместо того, чтобы всегда при условии, что это ISO 8859-1. Использование способного HTML-анализатора, такого как Beautiful Soup, может помочь.

+0

Я не предполагал ISO 8859-1. Кодировка указана в метатегах возвращенного HTML-документа. – Sudheer

+0

Я использую lxml.html для анализа HTML. – Sudheer

+0

Тогда почему вы его декодируете сами? –

0

Веб-страница лежит; он кодируется в cp1252 aka windows-1252, а не в ISO-8859-1.

>>> import urllib 
>>> guff = urllib.urlopen('http://www.indianexpress.com/news/heart-of-the-deal/811626/').read() 
>>> uguff = guff.decode('latin1') 
>>> baddies = set(c for c in uguff if u'\x80' <= c < u'\xa0') 
>>> baddies 
set([u'\x93', u'\x92', u'\x94', u'\x97']) 
Смежные вопросы