Обоснование спецификации для & # x80; к & # x9F; в документах UTF-8 требуется поведение браузера - PullRequest
4 голосов
/ 23 декабря 2011

Спецификация HTML 4.01 говорит о шестнадцатеричных ссылках на символы

Числовые ссылки на символы указывают позицию кода символа в наборе символов документа.

Так, если кодировка набора символов документа - UTF-8, числовые ссылки должны указывать кодовую точку Unicode.

В спецификации HTML5 говорится о шестнадцатеричных ссылках на символы

За амперсандом должен следовать символ ЗНАКА НОМЕРА U + 0023 (#), за которым должен следовать символ МАЛОГО ПИСЬМА U + 0078 X (x) или Символ X ПИСЬМА ЛАТИНСКОЙ БУКВЫ U + 0058 (X), за которым должны следовать одна или несколько цифр в диапазоне от U + 0030 ЦИФРОВОЙ НОЛЬ (0) до U + 0039 ЦИФРОВАЯ ДЕВЯТЬ (9), U + 0061 МАЛЕНЬКОЕ ПИСЬМО А до U + 0066 МАЛЕНЬКОЕ ПИСЬМО F иU + 0041 LATIN CAPITAL LETTER A - U + 0046 LATIN CAPITAL LETTER F, представляющий целое число из шестнадцати базовых чисел, которое соответствует кодовой точке Unicode, разрешенной в соответствии с приведенным ниже определением.Затем за цифрами должен следовать символ SEMICOLON U + 003B (;).

В наборе символов документа не упоминается, и он просто говорит, что числовое значение идентифицирует кодовую точку Unicode.

Но, похоже, что все современные браузеры (я не тестировал старые) обрабатывают € - Ÿ, как если бы они ссылались на Windows-1252

Например, € отображает ,но U + 0080 не является кодовой точкой для , U + 20AC есть.И кодовая точка Unicode для U + 0080 определяется как PAD

€, также (правильно) отображает .

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

[Обратите внимание, что десятичные ссылки на символы имеют такое же поведение.Я только что использовал шестнадцатеричные для ясности и последовательности.]

Ответы [ 2 ]

5 голосов
/ 23 декабря 2011

Я нашел ответ на свой вопрос.Именно в разделе токенизации алгоритма синтаксического анализа в HTML5 для используется ссылка на символ , которая определяет отображение для этих символов.

3 голосов
/ 23 декабря 2011

Как я уже сделал здесь , я процитирую Википедию еще раз:

Числовые ссылки всегда относятся к кодовым точкам Юникода, независимо от кодировки страницы. Использование числовых ссылок, которые относятся к постоянно неопределенным символам и управляющим символам, запрещено, за исключением символов перевода строки, табуляции и возврата каретки. То есть символы в шестнадцатеричных диапазонах 00–08, 0B – 0C, 0E – 1F, 7F и 80–9F нельзя использовать в документе HTML, даже по ссылке, поэтому, например, ™ недопустим , Однако для обратной совместимости с ранними авторами HTML и браузерами, которые игнорировали это ограничение, необработанные символы и ссылки на цифровые символы в диапазоне 80–9F интерпретируются некоторыми браузерами как представляющие символы, сопоставленные с байтами 80–9F в кодировке Windows-1252.

Так что, похоже, проблема унаследована.

...