Когда вы используете Validate by URI, сервер должен объявить кодировку символов в HTTP-заголовках, точнее в параметре charset
значения заголовка Content-Type
.В этом случае, похоже, этого не происходит. Вы можете проверить ситуацию, например. используя Rex Swain's HTTP Viewer.
В соответствии с разделом 4.2.5.5 Specifying the document's character encoding в HTML5 CR: «Если HTML-документ не начинается с спецификации, и его кодировка явно не указана метаданными Content-Type, и документ не является документом iframe srcdoc, тогда символ используемая кодировка должна быть кодировкой символов, совместимой с ASCII, и кодировка должна быть указана с использованием мета-элемента с атрибутом charset или мета-элементом с атрибутом http-equiv в состоянии объявления кодирования. «Это немного сложно, но В нижней строке есть: есть несколько способов объявить кодировку, но если ни один из них не используется, документ не соответствует требованиям.
Почему указывает, что это несколько умозрительно, но общая идея заключается в том, что такие правила повышают надежность и надежность. Когда правило не соблюдается, разные браузеры могут использовать разные значения по умолчанию или догадки.
Валидатор предполагает наличие окон-1252, потому что это то, к чему приводит правила HTML5. Правила обработки находятся в 8.2.2.1 Determining the character encoding. Они довольно сложны, но они в значительной степени отражают то, как делают современные браузеры (и ставят своей целью сделать его стандартом). Правила там также предназначены для обработки несоответствующих документов, но это не делает эти документы соответствующими; правила обработки ошибок на самом деле не являются «резервными», и на них нельзя положиться, тем более что старые браузеры не всегда играют по правилам.
Правила ошибки немного ослабляются, когда дело доходит до ситуации, когда все остальное терпит неудачу, и используется «кодировка символов по умолчанию, определяемая реализацией или пользователем». Есть только «предложения» о том, какие браузеры могут делать (опять же, отражая то, что обычно делают современные браузеры), и это может включать использование «пользовательской локали», неясной концепции. Валидатор использует окна-1252, возможно, потому, что это значение по умолчанию для английского языка, а валидатор «говорит» по-английски, или, может быть, только потому, что это предположение, которое, как ожидается, будет правильным чаще, чем любая другая единственная альтернатива.
Что заставляет вас думать, что браузер предполагает UTF-8, когда не указана кодировка? О каких «резервных правилах» вы имеете в виду? –
Работает ли кодировка окон-1252? – pattyd
Интересно ... ваш пример html показан как html5/utf8, когда я вставляю его в проверку с помощью прямого окна ввода – WebChemist