Я просто хочу загрузить этот URL ... но он выдает мне сообщение об ошибке!...юникод..(Python)
Вопрос
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')