Во-первых, заголовок Content-Encoding
не описывает используемый набор символов.Как сказано в RFC :
Кодировки содержимого в основном используются для того, чтобы позволить документу сжиматься или иным образом эффективно преобразовываться без потери идентичности его основного типа носителя и без потери информации.
Используемый набор символов описан в заголовке Content-Type
.Например:
Content-Type: text/html; charset=UTF-8
Ваш код выше, который использует заголовок Content-Encoding
, не будет правильно идентифицировать набор символов.Вы должны взглянуть на заголовок Content-Type
, найти точку с запятой, если она есть, а затем проанализировать параметр charset
.
И, как вы обнаружили, его также можно описать в HTML META
tag.
Или, может быть, вообще нет определения набора символов, и в этом случае вам нужно что-то по умолчанию.Мой опыт показывает, что по умолчанию UTF-8 является хорошим выбором.Это не на 100% надежно, но кажется, что сайты, которые не включают параметр charset
с полем Content-Type
, обычно , по умолчанию имеют значение UTF-8.Я также обнаружил, что теги META
, если они существуют, почти наполовину неверны.
Как упомянул LB в своем комментарии, можно загрузить байты и исследовать их, чтобы определить кодировку.Это может быть сделано с удивительной степенью точности, но требует много кода.