Каков тип контента/набор символов по умолчанию?

(замечание общего порядка - другие ответы касаются деталей)

нет никакой причины, что необходимо потерять мобильность при помощи их.

у Вас всегда есть опция создания простого нулевого эффекта, "встроенного" или макро-, который позволит Вам компилировать на других платформах с другими компиляторами.

Вы просто не извлечете пользу из оптимизации, если Вы будете на других платформах.

6
задан Community 23 May 2017 в 10:27
поделиться

5 ответов

Есть ли "кодировка" по умолчанию (конечно, английский) ... чтобы я мог просто использовать ее, если ничего не найдено?

Нет, нет. Вы должны догадаться.

Тривиальный подход: попробуйте декодировать как UTF-8 . Если работает - отлично, вероятно, это UTF-8. Если это не так, выберите наиболее вероятную кодировку для типов просматриваемых страниц. Для страниц на английском языке это cp1252 , западноевропейская кодировка Windows. (Это похоже на ISO-8859-1; на самом деле большинство браузеров будут использовать cp1252 вместо iso-8859-1 , даже если вы укажете эту кодировку, поэтому стоит продублировать это поведение. )

Если вам нужно угадывать другие языки, это становится очень сложно. Существуют модули, которые помогут вам угадать в таких ситуациях. См. Например. chardet .

3
ответ дан 16 December 2019 в 21:41
поделиться

Ну, я только что просмотрел данный URL-адрес, который перенаправляет на

http://www.engadget.com/2009/11/23/apple-hits-back-at-verizon-in-new-iphone-ads-video

, затем нажимает Crtl-U (просмотреть исходный код) в FireFox и показывает

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

@Konrad: что вы имеете в виду "кажется как будто ... использует ISO-8859-1 "??

@alex: почему вы думаете, что у него нет" кодировки "??

Посмотрите на код, который у вас есть (который, как мы УГАДАЕМ, является строка, вызывающая ошибку (всегда показывайте ПОЛНУЮ трассировку и сообщение об ошибке!)):

htmlSource = unicode(htmlSource, encoding)

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

TypeError: 'int' object is not callable

Это означает, что unicode не относится к встроенной функции, он ссылается на int . Напомню, что в другом вашем вопросе у вас было что-то вроде

if unicode == 1:

. Я предлагаю вам использовать другое имя для этой переменной, например use_unicode.

Дополнительные предложения: (1) всегда показывать достаточно кода для воспроизведения ошибки (2) всегда читайте сообщение об ошибке.

3
ответ дан 16 December 2019 в 21:41
поделиться

Теоретически , кодировка по умолчанию - ISO-8859-1 . Но часто на это нельзя положиться. Веб-сайты, которые не отправляют явную кодировку, заслуживают выговора. Хотите отправить гневное письмо веб-мастеру Endgadget?

2
ответ дан 16 December 2019 в 21:41
поделиться

htmlSource = htmlSource.decode ("utf8") должен работать в большинстве случаев, за исключением того, что вы сканируете сайты с неанглийской кодировкой.

или вы можете написать функцию принудительного декодирования, например это

def forcedecode(text):
    for x in ["utf8","sjis","cp1252","utf16"]:
        try:return text.decode(x)
        except:pass
    return "Unknown Encoding"
0
ответ дан 16 December 2019 в 21:41
поделиться

Если явного типа содержимого нет, это должен быть ISO-8859-1, как указано ранее в ответах. К сожалению, это не всегда так, поэтому разработчики браузеров потратили некоторое время на разработку алгоритмов, которые пытаются угадать тип содержимого на основе содержимого вашей страницы.

К счастью для вас, Марк Пилигрим проделал всю тяжелую работу по переносу реализация firefox для python в виде модуля chardet . Его введение о том, как это работает для одной из глав Dive Into Python 3, также стоит прочитать.

0
ответ дан 16 December 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: