Я получил местоположение u '\ u0107 \ x9d \ xad \ u013a \ u02c7 \ x9e \ u013a \ xb8 \ x82', которое на самом деле должно быть '\ xe6 \ x9d \ XAD \ xe5 \ xb7 \ x9e \ xe5 \ XB8 \ X82. Как я могу декодировать что-то вроде этого?python crawler get messy code, который, кажется, имеет тип кодирования muti
ответ
Предлагаю вам прочитать python 2.7 unicode.
\u0107\x9d\xad\u013a\u02c7\x9e\u013a\xb8\x82
не равно \xe6\x9d\xad\xe5\xb7\x9e\xe5\xb8\x82
, поэтому, я полагаю, что что-то не так с вашим кодом искателя.
В python2.x вы должны быть осторожны с проблемой кодирования. В Python2 у нас есть два типа текста: str, который для всех целей и задач ограничен ASCII + некоторыми неопределенными данными над 7-битным диапазоном, unicode, который эквивалентно типу Python 3 str и одному байтовому типу bytearray, который он унаследовал от Python 3.
Python2 предоставляет путь миграции из не-Unicode в Unicode, разрешая принуждение байтовых строк и не байт-строк. Вы можете проверить More About Unicode in Python 2 and 3.
Также вы можете добавить это в начале своего сценария, он устанавливает системную кодировку по умолчанию как utf-8. Он удобен для тестирования программы, и он исправит вашу проблему.
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
В самом деле, я не предлагаю использовать программатор это в большой program.It может вызвать другие проблемы.
Проблема с кодировкой в Python2.x действительно обескуражена, и если вы хотите избежать проблемы с кодировкой, вы должны начать серьезно думать о переключении на Python3.
Надеюсь, это поможет.
Спасибо за ваш ответ. Но я хочу знать, как декодировать эту строку в «杭州市», а не «ćĺ帻. – lingeng
. Замечания по кодированию не влияют на кодировку по умолчанию системы. Они просто говорят интерпретатору Python, кодирование которого использовалось для создания файла, содержащего скрипт, IOW, они влияют только на декодирование самого скрипта, они не влияют на внешние данные, которые сценарий читает или записывает. –
@ PM2Ring [setdefaultencoding] (https://docs.python.org/2/library/sys.html#sys.setdefaultencoding) – McGrady
Как вы создали эту строку в Unicode? Почему вы считаете, что это должно быть '' \ xe6 \ x9d \ xad \ xe5 \ xb7 \ x9e \ xe5 \ xb8 \ x82''? Какие кодировки вы используете. Я предполагаю, что вы используете Python 2, но какую ОС вы используете? FWIW, если мы предположим, что ваша вторая строка является UTF-8, она декодирует '' 杭州市 '', которая является' '\ u676d \ u5dde \ u5e02'', используя escape-последовательности Unicode. –
Я получил эту строку от искателя, и я вижу результат с их оригинальной страницы, которая является «杭州市». Я, я использую python2.7, и я получил эту строку как на Mac, так и на Centos7. Есть что-то действительно странное, что, если я нахожу этот URL из Chrome, он показывает правильный результат, который есть «'杭州市», но если я открою инструмент разработчика Chrome, он покажет «æå · žå¸», – lingeng
Этот код искателя сломан или неправильно настроен. И вы все еще не указали, какую кодировку вы используете. Вы можете найти эту статью полезной: [Pragmatic Unicode] (http://nedbatchelder.com/text/unipain.html), которая была написана ветеранкой SO Нед Батчелдер. –