Проблема
При экранировании веб-страницы с использованием python нужно знать кодировку символов страницы. Если вы получите кодировку символов неправильно, чем ваш вывод будет испорчен.
Люди обычно используют некоторые рудиментарные методы для обнаружения кодирования. Они либо используют кодировку из заголовка, либо кодировку, определенную в метатеге, либо используют детектор кодирования (который не заботится о метатегах или заголовки). Используя только один из этих методов, иногда вы не получите тот же результат, что и в браузере.
Браузеры делают это следующим образом:
- Метатеги всегда имеют приоритет (или определение xml)
- Кодировка, определенная в заголовке, используется, когда в метатеге нет символа
- Если кодировка не определена вообще, это время для обнаружения кодирования.
(Ну... по крайней мере, так я считаю, что большинство браузеров это делают. Документация действительно скудная.)
То, что я ищу, это библиотека, которая может решить набор символов на странице так, как это сделал бы браузер. Я уверен, что я не первый, кому нужно правильное решение для эта проблема.
Решение (я еще не пробовал...)
Согласно Документация Beautiful Soup.
Beautiful Soup пытается в порядке очередности кодирования превратить ваш документ в Юникод:
- Кодировка, которую вы передаете в качестве fromEncoding аргумент супу конструктор.
- Кодировка, обнаруженная в самом документе: например, в декларации XML или (для HTML-документов) тег META-http-equiv. Если Beautiful Soup находит этот вид кодировки внутри документа, он снова анализирует документ с самого начала и дает новую кодировку. Единственное исключение - если вы явно указали кодировку, и эта кодировка действительно сработала: тогда она будет игнорировать любую кодировку, найденную в документе.
- Кодирование фыркнуло, просмотрев первые несколько байтов файла. Если обнаружено кодирование на этом этапе он будет одним из Кодировки UTF- *, EBCDIC или ASCII.
- кодирование, обнюхиваемое чартой если вы его установили.
- UTF-8
- Windows-1252