На главную
Протокол HTTP ([RFC2068],
раздел 3.7.1) считает ISO-8859-1 кодировкой символов по умолчанию, если
параметр "charset" в поле заголовка "Content-Type" отсутствует. На
практике эта рекомендация бесполезна, поскольку некоторые серверы не
позволяют отправлять параметр "charset", а некоторые могут не быть
сконфигурированы для отправки этого параметр. Поэтому агенты
пользователей не должны предполагать никакого значения параметра "charset".
Для указания ограничений сервера или конфигурации документы HTML
могут включать явную информацию о кодировке символов документа; для
предоставления такой информации агентам пользователя может
использоваться элемент
META.
Например, чтобы указать, что кодировкой символов в текущем документе
является "EUC-JP", включите следующее объявление
META:
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
Объявление
META должно использоваться, только если
кодировка символов упорядочена так, что символы ASCII стоят на своем
месте (по крайней мере, при разборе элемента
META). Объявления
META должны быть в тексте как можно
раньше в элементе
HEAD.
В случаях, когда ни протокол HTTP, ни элемент
META не предоставляют информации о
кодировке документа, HTML предоставляет атрибут
charset для некоторых элементов.
Объединив все эти механизмы, автор может существенно повысить шансы на
то, что, когда пользователь загружает ресурс, агент пользователя
распознает кодировку символов.
Подводя итоги, соответствующие агенты пользователей при определении
кодировки символов
документа (от высшего приоритета к низшему) должны руководствоваться
следующими источниками
в соответствии с приоритетом:
- Параметр "charset" протокола HTTP в поле "Content-Type".
- Объявление
META, в котором для "http-equiv"
установлено "Content-Type" и установлено значение для "charset".
- Атрибут
charset устанавливается на элемент,
обозначающий внешний ресурс.
Кроме этого списка приоритетов, агент пользователя может использовать
эвристические установки и установки пользователя. Например, многие
агенты пользователей используют эвристику для распознавания различных
кодировок, используемых для японского языка. Агенты пользователей обычно
имеют определяемую пользователем локальную кодировку по умолчанию,
которую они используют, если нет указаний кодировки.
Агенты пользователей могут обеспечивать механизм, позволяющий
пользователям изменять некорректную информацию о наборе символов. Однако
если агент пользователя предлагает такой механизм, он должен предлагать
его только для просмотра, а не для изменения, во избежание создания
Web-страниц с некорректным параметром "charset".
Примечание. Если в каком-то приложении нужно
использовать символы, не входящие в кодировку
[ISO10646], этим символам должна быть назначена персональная
зона во избежание конфликтов с настоящей или будущими версиями
стандарта. Однако это не рекомендуется из соображений переносимости.
Данная кодировка символов может не содержать все символы из набора
символов документа. Для таких кодировок или для таких конфигураций
оборудования и программного обеспечения, не позволяющих пользователям
вводить определенные символы, авторы могут использовать
ссылки на символы SGML.
Ссылки на символы - это независимый от кодировки механизм ввода любых
символов.
Ссылки на символы в HTML могут принимать две формы:
- Числовые ссылки на символы (десятичные или шестнадцатеричные).
- Ссылки на комбинации символов.
Ссылки на символы в
комментариях не имеют значения; они
являются только данными комментариев.
Примечание. В SGML можно в некоторых случаях не
использовать заключительный символ ";" после ссылки на символы
(например, в символе переноса строки или непосредственно перед
тэгом). В других обстоятельствах их нельзя удалять (например, в
середине слова). Мы предлагаем использовать ";" всегда во избежание
проблем с агентами пользователей, для которых этот символ
обязателен.
5.3.1 Числовые ссылки на символы
Числовые ссылки на
символы указывают
код символа в наборе символов документа. Числовые ссылки на символы
могут также принимать две формы:
- Синтаксис "&#D;", где D - десятичное число,
указывает символ Unicode с десятичным номером D.
- Синтаксис "&#xH;" или "&#XH;", где H
- шестнадцатеричное число, указывает на символ Unicode с
шестнадцатеричным номером H. Шестнадцатеричные числовые
ссылки
учитывают регистр.
Вот некоторые примеры числовых ссылок на символы:
- å (десятичное) представляет букву "a" с кружком сверху
(используемую, например, в норвежском языке).
- å (шестнадцатеричное) представляет тот же символ.
- å (шестнадцатеричное) представляет тот же символ.
- И (десятичное) представляет кириллическую заглавную
букву "I".
- 水 (шестнадцатеричное) представляет китайский иероглиф
"вода".
Примечание. Хотя шестнадцатеричное
представление не определено в
[ISO8879], оно ожидается в новой версии, как описано в
[WEBSGML]. Это соглашение особенно полезно, поскольку стандарты
символов обычно используют шестнадцатеричные представления.
5.3.2 Комбинации ссылок на символы
Чтобы дать авторам более инициативный способ использования символов,
HTML предлагает набор
character entity
references. Комбинации ссылок на символы используют
символические имена, так что авторам не придется запоминать
коды. Например, комбинация å обозначает символ "a" нижнего
регистра с кружком сверху; "å" легче запомнить, чем å.
HTML 4.0 не определяет character entity reference для каждого
символа. Например, для кириллической буквы "I" нет character entity
reference. См.
полный список ссылок на символы, определенные в HTML 4.0.
Комбинации ссылок на символы
учитывают регистр. Так, Å
указывает на другой символ (A с кружком верхнего регистра), а не на
å (a с кружком нижнего регистра).
Четыре ссылки нужно упомянуть специально, поскольку они часто
используются для указания специальных символов:
- "<" представляет знак <.
- ">" представляет знак >.
- "&" представляет символ &.
- "" представляет знак ".
Авторы, которые хотят поместить в текст символ "<", должны
использовать ссылку "<" (десятичный код ASCII 60) во избежание
возможной путаницы с началом тэга (открывающий разделитель начального
тэга). Точно так же следует использовать ">" (десятичный код ASCII
62) вместо ">", чтобы избежать проблем со старыми версиями агентов
пользователей, некорректно принимающих их за окончание тэга (закрывающий
разделитель тэга).
Авторам следует использовать "&" (десятичный код ASCII 38) вместо
"&" во избежание путаницы со ссылками на символы (открывающий
разделитель entity reference). Авторам также следует использовать
"&" в значениях атрибутов, поскольку ссылки на символы внутри
значений атрибута
CDATA разрешены.
Некоторые авторы используют character entity reference """ для
кодирования экземпляров двойных кавычек ("), поскольку этот символ может
использоваться для разделения значений атрибутов.
Возможно, агент пользователя не сможет
отобразить все символы в
документе, например, из-за отсутствия соответствующего шрифта или если
символ имеет значение, которое не может быть выражено во внутренней
кодировке агента пользователя и т.д.
Поскольку в этом случае есть несколько вариантов, этот документ не
предписывает определенной тактики. В зависимости от применения
непечатные символы могут также
обрабатываться дополнительной системой отображения, а не самим
приложением. В случае более сложного поведения, например, настроенного
для определенного сценария или языка, рекомендуем следующее поведение
для агентов пользователей:
- Примите явно видимый, но незаметный механизм для предупреждения
пользователя об отсутствующих ресурсах.
- Если отсутствующие символы представляются в другом числовом
представлении, используйте шестнадцатеричную (не десятичную) форму,
поскольку эта форма используется в стандартах наборов символов.