Я просто хочу загрузить этот URL ... но он выдает мне сообщение об ошибке!...юникод..(Python)

StackOverflow https://stackoverflow.com/questions/1808612

Вопрос

theurl = 'http://bit.ly/6IcCtf/'
urlReq = urllib2.Request(theurl)
urlReq.add_header('User-Agent',random.choice(agents))
urlResponse = urllib2.urlopen(urlReq)
htmlSource = urlResponse.read()
if unicode == 1:
    #print urlResponse.headers['content-type']
    #encoding=urlResponse.headers['content-type'].split('charset=')[-1]
    #htmlSource = unicode(htmlSource, encoding)
    htmlSource =  htmlSource.encode('utf8')
return htmlSource

Пожалуйста, взгляните на раздел unicode.Я пробовал эти два варианта...но не работает.

htmlSource =  htmlSource.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 370747: ordinal not in range(128)

а также это, когда я пробую более длинный метод кодирования...

_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
Это было полезно?

Решение

Ваши html-данные - это строка, которая поступает из Интернета уже закодированный с некоторой кодировкой.Перед кодированием его в utf-8, ты сначала нужно его расшифровать.

Python - это имплицитность пытаясь расшифровать его (вот почему вы получаете UnicodeDecodeError нет UnicodeEncodeError).

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

Пример:

utf8encoded = htmlSource.decode('some_encoding').encode('utf-8')

Используйте правильную кодировку, в которой страница была закодирована в первую очередь, вместо 'some_encoding'.

Ты иметь чтобы узнать, какую кодировку использует строка, прежде чем вы сможете ее декодировать.

Другие советы

Не декодировать? htmlSource = htmlSource.decode ('utf8')

декодировать означает "декодировать htmlSource из кодировки utf8"

кодировать среднее " кодировать htmlSource в кодировку utf8 "

поскольку вы извлекаете существующие данные (сканируете с веб-сайта), вам необходимо их декодировать, а при вставке в mysql может потребоваться кодирование как utf8 в соответствии с вашими сопоставлениями в базе данных mysql db / table / fields.

Возможно, вы хотите декодировать Utf8, а не кодировать его:

htmlSource =  htmlSource.decode('utf8')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top