Как работать с кодировками с помощью библиотеки Python Requests

Я слишком долго боролся с кодировками, и сегодня я хочу широко разорвать ментальный блок.

Прямо сейчас я использую Запросы для очистки множества веб-сайтов, и, насколько я могу судить, он использует заголовки HTTP для определения кодировки, которую используют страницы, возвращаясь к chardet при отсутствии заголовков сайта. Оттуда он декодирует загружаемый байт-код, а затем услужливо передает мне объект unicode в r.text.

Все хорошо.

Но что меня смущает, так это то, что оттуда я немного работаю с текстом, а затем распечатываю его на стандартный вывод,предоставление кодировки при печати:

 print foo.encode('utf-8')

Проблема в том, что когда я это делаю, напечатанное искажается. В дальнейшем я ожидаю увидеть тире между словами «суждения» и «стандарт» :

 Declaratory judgmentsStandard of review.

. Вместо этого я получаю квадратную штуку с четырьмя крошечными цифрами внутри. Конечно, здесь его не видно, но я думаю, что это числа 0097, что соответствует тому, что я получу, если сделаю:

repr(foo)
u'Declaratory judgments\x97Standard of review.'

Так что в этом есть смысл, но где мой тире?

Процесс сводится к:

  1. Запросы загружает страницу и интеллектуально декодирует текст в объект Unicode
  2. . Я работаю с ним
  3. Я кодирую его в utf -8 и распечатываю.

В чем проблема? Для меня это звучит как мифический бутерброд с юникодом , но я явно что-то упускаю.

5
задан Jeremy Banks 25 November 2012 в 07:26
поделиться