ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256

  aranea.ru || Спецификация HTML 4.01 | 5. Представление документа HTML

5. Представление документа HTML

5.2. Кодировки символов

5.2.1. Выбор кодировки
   Заметки по особым кодировкам
5.2.2. Определение кодировки символов

То, что эта спецификация называет кодировкой символов, в других спецификациях известно под другими именами. Это может привести к путанице. Но основная концепция одинакова по всему Интернету. Кроме этого, заголовки протоколов, атрибуты и параметры, ссылающиеся на кодировки символов, имеют одинаковое имя - "charset" – и используют те же значения из регистра [IANA] (смотрите [CHARSETS] для получения полного перечня).

Параметр "charset" определяет кодировку символов, т.е. метод конвертирования последовательности битов в последовательность символов. Это конвертирование подстраивается естественным образом к схеме деятельности Web: серверы посылают HTML-документы устройствам вывода как поток битов; устройства вывода интерпретируют их как последовательность символов. Метод конвертирования может иметь диапазон от простого соответствия "один к одному" до сложных переключающих схем или алгоритмов.

Простая методика кодировки символов "один бит - один символ" не достаточна для текстовых строк в наборе символов, таких больших, как [ISO10646]. Существует несколько различных кодировок в [ISO10646] дополнительно для кодировок полного набора символов (подобного UCS-4).

5.2.1 Выбор кодировки

Авторские инструментальные средства (например, текстовые редакторы) могут кодировать HTML-документы в кодировке символов по их усмотрению, и этот выбор, главным образом, зависит от правил, используемых программным обеспечением системы. Эти инструментальные средства могут использовать любую удобную кодировку, которая охватывает большую часть символов, имеющихся в документе, и предоставлять корректно помеченную кодировку. Редкие символы, которые выпадают из этой кодировки, все же могут отображаться с помощью специальных символов. Средства всегда обращаются к набору символов документа, а не к кодировке символов.

Серверы и модули доступа могут менять кодировку символов (это называется преобразованием кода - transcoding) "на лету" для согласования с требованиями устройств вывода (смотрите раздел 14.2 в [RFC2616], "Accept-Charset" HTTP request header). Серверы и модули доступа не должны обслуживать документы в кодировке символов, которые охватывают полный набор символов документа.

Обычно используемые кодировки символов в Web включают ISO-8859-1 (другое название - "Latin-1"; она используется в большинстве западноевропейских языках), ISO-8859-5 (которая поддерживает кириллические шрифты), SHIFT_JIS (японская кодировка), EUC-JP (другая японская кодировка) и UTF-8 (кодировка ISO 10646, использующая различное количество битов для разных символов). Имена для кодировок символов не чувствительны к регистру, так что "SHIFT_JIS", "Shift_JIS" и "shift_jis" - эквивалентны.

Эта спецификация не дает указаний, какие кодировки символов устройство вывода должно поддерживать.

Согласующиеся устройства вывода должны корректно преобразовывать данные к любым символам ISO 10646 в любых кодировках символов, которые они распознают (или они должны вести себя так, как если бы они это делают).

Заметки по особым кодировкам

Когда текст HTML передается в UTF-16 (charset=UTF-16), то текстовые данные должны посылаться в байтовом порядке сети ("big-endian", старший байт первый) в соответствии с разделом 6.3 в [ISO10646] и со статьей С3 в [UNICODE] на странице 3-1.

Более того, для увеличения шансов правильной интерпретации, рекомендуется, чтобы документы, передаваемые как UTF-16, всегда начинались бы с символа неразрывного пробела нулевой ширины (ZERO-WIDTH NON-BREAKING SPACE) (шестнадцатиричное значение - FEFF, называемого также маркером последовательности байтов - Byte Order Mark (BOM)), который, когда происходит реверсия байта, становится шестнадцатиричным значением FFFE, символом, который точно никогда не будет назначен. Таким образом, устройство вывода, получающее шестнадцатиричный FFFE, как первый байт текста, будут знать, что байты в оставшейся части текста необходимо перевернуть.

Формат трансформации UTF-1 в [ISO10646] (зарегистрированный в IANA как ISO-10646-UTF-1) не следует использовать. Для получения информации о ISO 8859-8 и двухстороннем алгоритме, обратитесь к разделу по двусторонности и кодировке символов.

5.2.2 Определение кодировки символов

Как сервер определяет, какая кодировка символов применяется для документа, обслуживаемого им? Некоторые серверы проверяют первые несколько байтов документов, или проверяют базу данных известных файлов и кодировок. Многие современные серверы дают ведущим устройствам Web больше контроля над конфигурацией charset, чем это делали старые. Ведущие устройства Web должны использовать эти механизмы для посылки параметров "charset" всегда, когда это возможно, но им необходимо быть осторожными, чтобы не идентифицировать документ с ошибочным значением параметра "charset".

Как устройство вывода узнает, какая кодировка символов была использована? Серверу следует предоставить эту информацию. Самый простой способ для сервера проинформировать устройство вывода о кодировке символов в документе, т.е. использование параметра "charset" в заголовке "Content-Type" протокола HTTP ([RFC2616], раздел 3.4 и 14.17) Например, следующий заголовок HTTP сообщает, что кодировка символов - EUC-JP:

Content-Type: text/html; charset=EUC-JP

Пожалуйста, обратитесь к разделу по согласованию определения text/html.

Протокол HTTP ([RFC2616], раздел 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 обозначают символы ASCII (по крайней мере, до того, как элемент META подвергается синтаксическому анализу). Декларациям META следует появляться самыми первыми, насколько это возможно, в элементе HEAD.

Для случаев, когда ни протокол HTTP, ни элемент META не предоставляют информацию о кодировке символов документа, HTML имеет атрибут charset для нескольких элементов. Путем комбинирования этих механизмов автор может значительно улучшить шансы того, что когда пользователь извлекает ресурс, устройство вывода распознавало бы кодировку символов.

В итоге, согласующиеся устройства вывода должны просматривать следующие приоритеты, когда определяют кодировку символов в документе (от самого высшего приоритета к самому низкому):

  1. Параметр HTTP "charset" в "Content-Type".
  2. Объявление META с "http-equiv", установленного как "Content-Type", и со значением, установленным для "charset".
  3. Атрибут charset, установленный для элемента, который предназначен для внешнего ресурса.

Дополнительно к этому списку приоритетов, устройство вывода может использовать эвристику и установки пользователя. Например, многие устройства вывода используют эвристику для установления различных кодировок, используемых для японского текста. Кроме этого, устройства вывода обычно имеют локальную кодировку символов по умолчанию, определяемую пользователем, которую они применяют при отсутствии других указателей.

Устройство вывода может предоставить механизм, который позволяет пользователям преодолеть некорректную информацию "charset". Но, если устройство вывода предлагает такой механизм, то оно должно только предлагать его для просмотра, а не для редактирования, что бы избежать создания страниц Web, промаркированных некорректным параметром "charset".

Обратите внимание. Если для специального приложения необходимо обратиться к символам вне диапазона [ISO10646], то символам следует назначать частную зону, что бы избежать конфликты с настоящей и будущей версиями стандарта. Иначе, это вызовет затруднения с точки зрения переносимости.


← Назад | Вперед →
Copyright © 2006 -  aranea.ru