2010-09-12 2 views
3

Я использую urlfetch для извлечения URL-адреса. Когда я пытаюсь отправить его html2text функции (отсекает все HTML-тег), я получаю следующее сообщение:UnicodeEncodeError при выборе URL-адресов

UnicodeEncodeError: 'charmap' codec can't encode characters in position ... character maps to <undefined> 

Я пытался обработать закодировать («UTF-8», «игнорировать») на строка, но я продолжаю получать эту ошибку.

Любые идеи?

Спасибо,

Joel


Некоторые Код:

result = urlfetch.fetch(url="http://www.google.com") 
html2text(result.content.encode('utf-8', 'ignore')) 

И сообщение об ошибке:

File "C:\Python26\lib\encodings\cp1252.py", line 12, in encode 
return codecs.charmap_encode(input,errors,encoding_table) 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 159-165: character maps to <undefined> 
+0

Пожалуйста, добавьте 'content_type = result.headers.getheader ('Content-Type'); print (content_type) 'на ваш код (после' result = urlfetch.fetch (...) ') и сообщите нам результат. – unutbu

+0

Выход: «windows-1255». Я попытался переключиться на html2text (result.content.decode («windows-1255», «игнорировать»)), но я все равно получаю «UnicodeEncodeError: кодек charmap» не может кодировать символы в позиции 2-8: символьные карты до « – Joel

ответ

6

Вы должны декодировании данные, которые вы получили первым! С каким кодеком? Зависит от веб-сайта, который вы получаете.

Если у вас есть юникод и попробуйте его закодировать с помощью some_unicode.encode('utf-8', 'ignore'), я не могу представить, как это может вызвать ошибку.

Хорошо то, что вам нужно сделать:

result = fetch('http://google.com') 
content_type = result.headers['Content-Type'] # figure out what you just fetched 
ctype, charset = content_type.split(';') 
encoding = charset[len(' charset='):] # get the encoding 
print encoding # ie ISO-8859-1 
utext = result.content.decode(encoding) # now you have unicode 
text = utext.encode('utf8', 'ignore') # encode to uft8 

Это не очень надежный, но он должен показать вам путь.

+0

Извините, я имею в виду декодирование .. моя ошибка! – Joel

+0

знаю, какой кодек мне нужно использовать? Скажем, для google.com – Joel

+0

@Joel: кодек, который вам нужно декодировать, либо находится в заголовках HTTP, либо в метатеге HTML (или не указывается, тогда вы должны угадать). Google - плохой пример для этого, потому что веб-сайт, который вы получаете, зависит от того, где вы живете: p –

Смежные вопросы