Нет, это невозможно изнутри HTML. Заголовок ответа сервера имеет приоритет над метатегом документа. Как указано в 5.2.2 Указание кодировки символов - HTML 4.01 Спецификация :
Таким образом, соответствующие пользовательские агенты должны соблюдать следующие приоритеты при определении кодировки символов документа (от наивысшего приоритета к низшему):
- HTTP-параметр "charset" в поле "Content-Type".
- Декларация META с http-эквивалентным значением «Content-Type» и значением, установленным для «charset».
- Атрибут charset установлен для элемента, который обозначает внешний ресурс.
Так что это требует настройки на стороне сервера. Однако, как продолжается глава:
Пользовательские агенты могут предоставлять механизм, который позволяет пользователям переопределять неверную информацию «кодировки». Однако, если пользовательский агент предлагает такой механизм, он должен предлагать его только для просмотра, а не для редактирования, чтобы избежать создания веб-страниц, помеченных неверным параметром «charset».
В моем случае заголовок Content-Type сервера содержит правильный mime-тип, но неправильную кодировку .
Как оказалось, в моей конфигурации Apache httpd была включена функция AddDefaultCharset
добавления ; charset=ISO-8859-1
части. Поместив в корневой каталог сайтов .htaccess
следующую строку:
AddDefaultCharset Off
информация о кодировке была удалена:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 15:07:52 GMT
...
Content-Type: text/html
(см. последнюю строку, без ; charset=...
части). Это в сочетании с метатегом html запускает указанную эвристику браузера, чтобы перенять кодировку из метатега. Сайт правильно декодирован.
Протестировано с:
- Google Chrome v. 22.0.1229.94
- Firefox v. 16.0.1
- Рысь версия 2.8.7rel.1 (05 июля 2009)
Эти три браузера имели проблемы с исходной конфигурацией и теперь работают (все на Fedora 17).
- Опера 12.02
- Internet Explorer 6 (Win XP SP3)
Во-первых, не было проблемы. Оба предпочитали UTF-8 из мета-тега по сравнению с настройкой ISO-8859-1 с сервера.
Не поддерживает UTF-8, поэтому всегда выбирает Western (Latin1) независимо от настроек сервера и метатега.