Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 18. Представление документа в формате HTML
Для обеспечения возможности взаимодействия сетей SGML требует от каждого приложения (включая HTML) указания набора символов документа. Документ включает: Репертуар Набор абстрактных символов, таких как латинская буква «A», кириллическая буква «I», китайский иероглиф «вода» и т.д. Коды Набор целочисленных ссылок на символы репертуара. Каждый документ SGML (включая каждый документ HTML) — это последовательность символов из репертуара. Компьютерные системы идентифицируют каждый символ по его коду; например, в наборе символов ASCII коды 65, 66 и 67 означают символы «A», «B» и «C» соответственно. Набора символов ASCII недостаточно для такой глобальной информационной системы, как Web, поэтому HTML использует более полный набор символов, называемый Универсальным набором символов (Universal Character Set — UCS). Этот стандарт определяет репертуар тысяч символов, используемых во всем мире. Набор символов — это посимвольный эквивалент Unicode 2.0. Оба эти стандарта время от времени обновляются, пополняются новыми символами, об изменениях следует узнавать на соответствующих серверах Web. О спецификации HTML Unicode также упоминается при обсуждении других вопросов, таких как алгоритм двунаправленного текста. Набора символов документа, однако, недостаточно, чтобы браузеры могли корректно интерпретировать документы HTML при типичном обмене — закодированные как последовательность байт в файле или во время передачи по сети. Браузеры должны также знать кодировки символов, которые использовались для преобразования потока символов документа в поток байт. Кодировки символов Кодировки символов в ряде спецификаций имеют другие названия (что может вызвать некоторую путаницу). Однако это понятие в Интернет означает примерно одно и то же. Одно и то же имя — « charset — набор символов» — используется в заголовках протоколов, атрибутах и параметрах, ссылающихся на символы и использующих одни и те же значения. Параметр « charset » идентифицирует кодировку символов, которая является способом преобразования последовательности байт в последовательность символов. Это преобразование естественно вписывается в схему деятельности Web: серверы отправляют документы HTML браузерам в виде потока байт; браузеры интерпретируют их как последовательность символов. Способы преобразования могут меняться от простого соответствия один к одному до сложных схем или алгоритмов переключения. Простой техники кодировки «один байт — один символ» недостаточно для текстовых строк с широким репертуаром символов. Кроме кодировок всего набора символов (например, UCS-4), имеются некоторые другие кодировки частей. Выбор кодировки Средства разработки (например, текстовые редакторы) могут кодировать документы HTML в кодировках по своему выбору, и этот выбор существенно зависит от соглашений, используемых системным программным обеспечением. Эти средства могут использовать любую удобную кодировку, включающую большинство символов в документе, при условии, что кодировка корректно помечена. Некоторые символы, не включенные в эту кодировку, можно представить с помощью ссылок на символы. Это всегда относится к набору символов документа, а не к кодировке символов. Серверы и прокси могут изменять кодировку символов (что называется транскодированием) на лету для выполнения запросов браузерам в заголовке запроса HTTP « Accept-Charset ». Серверы и прокси не должны обслуживать документ в кодировке, включающей весь набор символов документа. Широко используемые в Web кодировки:
Названия кодировок символов не учитывают регистр, так что, например, «SHIFT_JIS», «Shift_JIS» и «shift_jis» эквивалентны. Соответствующие браузеры должны корректно отображать в Unicode все символы в любых кодировках, которые они могут распознавать. Замечания об определенных кодировках Когда текст HTML передается в UTF-16 (charset=UTF-16), текстовые данные должны передаваться в сетевом порядке байт («big-endian», байт высшего порядка — первый) в соответствии с ISO10646 и UNICODE. Более того, чтобы повысить вероятность правильной интерпретации, рекомендуется передавать документы UTF-16, всегда начиная с символа «неразделяющий пробел нулевой ширины» (шестнадцатерич-ный код FEFF, также называется «Меткой порядка байтов» (Byte Order Mark — BOM)), при обращении байт становится шестнадцатеричным FFFE, никогда не назначаемым символом. Таким образом, браузер, получивший шестнадцатеричный код FFFE в качестве первых байтов текста будет знать, что в остальном тексте байты нужно обратить. Не следует использовать формат трансформации UTF-1. Указание кодировки символов Как сервер определяет, какая кодировка символов применяется в документе? Некоторые серверы проверяют первые несколько байт документа или сверяются с базой данных известных файлов и кодировок. Многие современные серверы Web предоставляют администраторам больше возможностей управления конфигурацией набора символов, чем старые серверы. Администраторы серверов Web должны при возможности использовать следующие механизмы для отправки параметра « charset », но должны позаботиться о том, чтобы не установить для документов ошибочное значение параметра « charset ». Как браузер узнает, какая использовалась кодировка символов? Эту информацию предоставляет сервер. Лучшим способом проинформировать браузер о кодировке символов документа — использовать параметр « charset » в поле заголовка « Content-Type » протокола HTTP. Например, следующий заголовок HTTP объявляет, что используется кодировка EUC-JP: Content-Type: text/html; charset=EUC-JP Протокол HTTP считает 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 для некоторых элементов. Объединив все эти механизмы, автор может существенно повысить шансы на то, что, когда пользователь загружает ресурс, браузер распознает кодировку символов. Подводя итоги, соответствующие браузеры при определении кодировки символов документа (от высшего приоритета к низшему) должны руководствоваться следующими источниками в соответствии с приоритетом:
Кроме этого списка приоритетов, браузер может использовать эвристические установки и установки пользователя. Например, многие браузеры используют эвристику для распознавания различных кодировок, используемых для японского языка. Браузеры обычно имеют определяемую пользователем локальную кодировку по умолчанию, которую они используют, если нет указаний кодировки. Браузеры могут обеспечивать механизм, позволяющий пользователям изменять некорректную информацию о наборе символов. Однако если браузер предлагает такой механизм, он должен предлагать его только для просмотра, а не для изменения, во избежание создания Web-стра-ниц с некорректным параметром « charset ». Если в каком-то приложении нужно использовать символы, не входящие в кодировку, этим символам должна быть назначена персональная зона во избежание конфликтов с настоящей или будущими версиями стандарта. Однако это не рекомендуется из соображений переносимости. Ссылки на символы Данная кодировка символов может не содержать все символы из набора символов документа. Для таких кодировок или для таких конфигураций оборудования и программного обеспечения, не позволяющих пользователям вводить определенные символы, авторы могут использовать ссылки на символы SGML. Ссылки на символы — это независимый от кодировки механизм ввода любых символов. Ссылки на символы в HTML могут принимать две формы:
Ссылки на символы в комментариях не имеют значения; они являются только данными комментариев. HTML обеспечивает другие способы представления символов, в частности, встроенные изображения. В SGML можно в некоторых случаях не использовать заключительный символ «; » после ссылки на символы (например, в символе переноса строки или непосредственно перед тэгом). В других обстоятельствах их нельзя удалять (например, в середине слова). Мы предлагаем использовать «; » всегда во избежание проблем с браузерами, для которых этот символ обязателен. Числовые ссылки на символы Числовые ссылки на символы указывают код символа в наборе символов документа. Числовые ссылки на символы могут также принимать две формы:
Вот некоторые примеры числовых ссылок на символы: & #229; (десятичное) представляет букву «a» с кружком сверху (используемую, например, в норвежском языке). & #xE5; (шестнадцатеричное) представляет тот же символ. & #Xe5; (шестнадцатеричное) представляет тот же символ. & #1048; (десятичное) представляет кириллическую заглавную букву «I». & #x6C34; (шестнадцатеричное) представляет китайский иероглиф «вода». Популярное:
|
Последнее изменение этой страницы: 2017-03-03; Просмотров: 681; Нарушение авторского права страницы