Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Веб-страницы, созданные с использованием языка разметки гипертекста ( HTML ), могут содержать многоязычный текст, представленный универсальным набором символов Unicode . Ключом к взаимосвязи между Unicode и HTML является взаимосвязь между «набором символов документа», который определяет набор символов, которые могут присутствовать в документе HTML и присваивают им числа, и «внешней кодировкой символов» или «набором символов». ", используемый для кодирования данного документа как последовательности байтов.

В RFC 1866, исходном стандарте HTML 2.0, набор символов документа был определен как ISO-8859-1. Он был расширен до ISO 10646 (который в основном эквивалентен Unicode) RFC 2070. Он не меняется между документами на разных языках или созданными на разных платформах. Внешняя кодировка символов выбирается автором документа (или программным обеспечением, которое автор использует для создания документа) и определяет, как байты используются для хранения и / или передачи карты документа в символы из набора символов документа. Символы, отсутствующие в выбранной внешней кодировке символов, могут быть представлены ссылками на символьные сущности.

Взаимосвязь между Unicode и HTML, как правило, является сложной темой для многих компьютерных профессионалов, авторов документов и пользователей Интернета . Точное представление текста на веб-страницах с разных естественных языков и систем письма осложняется деталями кодировки символов , синтаксисом языка разметки , шрифтом и различными уровнями поддержки веб-браузерами .

Символы документа HTML [ править ]

Веб-страницы обычно представляют собой документы HTML или XHTML . Оба типа документов состоят на фундаментальном уровне из символов , которые являются графемами и графемоподобными единицами, независимо от того, как они проявляются в компьютерных системах хранения и сетях .

Документ HTML - это последовательность символов Юникода. Более конкретно, документы HTML 4.0 должны состоять из символов в наборе символов документа HTML  : репертуар символов, в котором каждому символу присваивается уникальный неотрицательный целочисленный код . Этот набор определен в HTML 4.0 DTD , который также устанавливает синтаксис (допустимые последовательности символов), с помощью которого можно создать действительный документ HTML. Набор символов документа HTML для HTML 4.0 состоит из большинства, но не всех символов, совместно определенных Unicode и ISO / IEC 10646: универсальный набор символов (UCS).

Как и HTML-документы, XHTML-документ представляет собой последовательность символов Unicode. Однако документ XHTML - это документ XML , который, хотя и не имеет явного уровня абстракции «символа документа» , тем не менее полагается на аналогичное определение допустимых символов, которое охватывает большинство, но не все определения символов Unicode / UCS. Наборы, используемые HTML и XHTML / XML, немного отличаются, но эти различия мало влияют на среднего автора документа.

Независимо от того, является ли документ HTML или XHTML, при хранении в файловой системе или передаче по сети символы документа кодируются как последовательность битовых октетов ( байтов ) в соответствии с определенной кодировкой символов. Эта кодировка может быть либо форматом преобразования Unicode , например UTF-8 , который может напрямую кодировать любой символ Unicode, либо устаревшей кодировкой, такой как Windows-1252 , которая не может. Однако даже при использовании кодировок, которые не поддерживают все символы Unicode, в закодированном документе могут использоваться ссылки на числовые символы . Например,☺ (☺) используется для обозначения символа улыбающегося лица в наборе символов Unicode.

Кодировка символов [ править ]

Чтобы поддерживать все символы Юникода, не прибегая к ссылкам на числовые символы, веб-страница должна иметь кодировку, охватывающую весь Юникод. Наиболее популярным является UTF-8 , где символы ASCII , такие как английские буквы, цифры и некоторые другие распространенные символы, сохраняются без изменений по сравнению с ASCII. Это делает код HTML (например, <br> и </div>) неизменным по сравнению с ASCII. Символы вне диапазона ASCII хранятся в 2–4 байтах. Также можно использовать UTF-16, где большинство символов хранятся в виде двух байтов с разной степенью байта , что поддерживается современными браузерами, но используется реже.

Ссылки на цифровые символы [ править ]

Чтобы обойти ограничения устаревших кодировок, HTML разработан таким образом, что можно представлять символы из всего Юникода внутри HTML-документа, используя числовую ссылку на символ : последовательность символов, которая явно обозначает точку кода Юникода. изображаемого персонажа. Ссылка на символ принимает форму N , где N - либо десятичное число для кодовой точки Unicode, либо шестнадцатеричное число, и в этом случае перед ним должен стоять префикс . Символы, составляющие числовую ссылку на символы, универсально представлены в любой кодировке, одобренной для использования в Интернете.&#;x

Поддержка шестнадцатеричного числа в этом контексте появилась позже, поэтому старые браузеры могут иметь проблемы с отображением символов, на которые ссылаются шестнадцатеричные числа, но у них, вероятно, возникнут проблемы с отображением символов Юникода над кодовой точкой 255 в любом случае. Чтобы обеспечить лучшую совместимость со старыми браузерами, по-прежнему распространенной практикой является преобразование шестнадцатеричной кодовой точки в десятичное значение (например, &#21512;вместо &#x5408;).

Именованные сущности персонажей [ править ]

В HTML 4 есть стандартный набор из 252 именованных символьных сущностей для символов - некоторые общие, некоторые неясные - которые либо не встречаются в определенных кодировках символов, либо чувствительны к разметке в некоторых контекстах (например, угловые скобки и кавычки). Хотя на любой символ Unicode можно ссылаться по его числовой кодовой точке, некоторые авторы HTML-документов предпочитают использовать вместо них эти именованные сущности, где это возможно, поскольку они менее загадочны и лучше поддерживались ранними браузерами.

Сущности символов могут быть включены в документ HTML с помощью ссылок на сущности , которые принимают форму EntityName , где EntityName - это имя сущности. Например, аналогично или представляет U + 2014 : длинное тире «-», даже если используемая кодировка символов не содержит этого символа.&;&mdash;&#8212;&#x2014;

Полный список см .: Список ссылок на символьные сущности XML и HTML .

Определение кодировки символов [ править ]

Чтобы правильно обрабатывать HTML, веб-браузер должен определить, какие символы Unicode представлены закодированной формой HTML-документа. Для этого веб-браузер должен знать, какая кодировка была использована.

Информация о кодировке [ править ]

Когда документ передается через сообщение MIME или транспорт, который использует типы содержимого MIME, такие как ответ HTTP , сообщение может сигнализировать о кодировании через заголовок Content-Type, например Content-Type: text/html; charset=UTF-8. Другие внешние средства объявления кодировки разрешены, но используются редко. Если в документе используется кодировка Unicode , информация о кодировке также может присутствовать в виде метки порядка байтов . Наконец, кодировку можно объявить с помощью синтаксиса HTML. Для text/htmlсериализации затем, до тех пор , как страница кодируется в расширении ASCII (например, UTF-8 , и , таким образом, не если страница использует UTF-16 ), а metaэлемент, как<meta http-equiv="content-type" content="text/html; charset=UTF-8">или (начиная с HTML5 ) <meta charset="UTF-8">можно использовать. Для HTML-страниц, сериализованных как XML, варианты объявления должны либо полагаться на кодировку по умолчанию (которая для XML-документов - UTF-8), либо использовать объявление кодировки XML. Атрибут meta не играет роли в HTML, который используется как XML.

Кодировка по умолчанию [ править ]

Кодировка по умолчанию применяется, когда нет объявления внешней или внутренней кодировки, а также нет метки порядка байтов. Хотя кодировка по умолчанию для HTML-страниц, обслуживаемых как XML, должна быть UTF-8, кодировка по умолчанию для обычной веб-страницы (то есть для HTML-страниц, сериализованных как text/html) зависит от локализации браузера. Для системы, настроенной в основном для западноевропейских языков, это обычно будет Windows-1252 . Для языков с кириллицей обычно используется значение по умолчанию Windows-1251 . Для браузера из места, где преобладают устаревшие кодировки многобайтовых символов, вероятно, будет применена какая-либо форма автоопределения.

Тенденции кодирования [ править ]

Из-за унаследованных 8-битных текстовых представлений в языках программирования и операционных системахи стремление не обременять пользователей необходимостью понимать нюансы кодирования, многие текстовые редакторы, используемые авторами HTML, не могут или не хотят предлагать выбор кодировок при сохранении файлов на диск и часто даже не позволяют вводить символы сверх очень ограниченный ассортимент. Следовательно, многие авторы HTML не знают о проблемах с кодировкой и могут не иметь представления о том, какую кодировку на самом деле используют их документы. Недоразумения, такие как вера в то, что объявление кодировки влияет на изменение фактической кодировки (тогда как на самом деле это просто метка, которая может быть неточной), также является причиной такого отношения редактора. Другим фактором, способствующим тому же направлению, является появление UTF-8, который значительно снижает потребность в других кодировках, и, таким образом, современные редакторы имеют тенденцию к использованию по умолчанию, как рекомендовано спецификацией HTML5,[1] в UTF-8.

Отметка порядка байтов / анализ Unicode [ править ]

Для обеих сериализаций HTML (тип контента «текст / html» и контент / тип «приложение / xhtml + xml») метка порядка байтов (BOM) является эффективным способом передачи информации о кодировке в документе HTML. Для UTF-8 спецификация не является обязательной, а для кодировок UTF-16 и UTF-32 она обязательна. (Примечание: UTF-16 и UTF-32 без спецификации формально известны под разными именами, они представляют собой разные кодировки и, следовательно, требуют некоторой формы объявления кодировки - см. UTF-16BE , UTF-16LE , UTF-32LE и UTF-32BE..) Использование символа спецификации (U + FEFF) означает, что кодировка автоматически объявляется для любого приложения обработки. Приложениям обработки нужно только искать начальные 0x0000FEFF, 0xFEFF или 0xEFBBBF в потоке байтов, чтобы идентифицировать документ как закодированные в UTF-32, UTF-16 или UTF-8 соответственно. Для этих кодировок не требуются дополнительные механизмы метаданных, поскольку метка порядка байтов включает в себя всю информацию, необходимую для обработки приложений. В большинстве случаев символ метки порядка байтов обрабатывается путем редактирования приложений отдельно от других символов, поэтому существует небольшой риск того, что автор удалит или иным образом изменит метку порядка байтов, чтобы указать неправильную кодировку (что может случиться, когда кодировка объявлена ​​в Английский / латинский алфавит). Если в документе отсутствует отметка порядка байтов,тот факт, что первый непустой печатаемый символ в документе HTML должен быть «<» (U + 003C), может использоваться для определения кодировки UTF-8 / UTF-16 / UTF-32.

Переопределение кодировки [ править ]

Многие документы HTML обслуживаются с неточной информацией о кодировке или вообще без информации о кодировке. Чтобы определить кодировку в таких случаях, многие браузеры позволяют пользователю вручную выбирать имя кодировки из списка. Они также могут использовать алгоритм автоматического определения кодирования, который работает совместно с или - в случае спецификации и в случае, когда HTML используется как XML - против ручного изменения.

Для text/htmlсериализованных HTML-документов ручное переопределение может применяться ко всем документам или только к тем, для которых нельзя определить кодировку, просматривая объявления и / или байтовые шаблоны. Тот факт, что ручное переопределение присутствует и широко используется, препятствует принятию точных деклараций кодировки в сети; поэтому проблема, скорее всего, не исчезнет. Но обратите внимание, что Internet Explorer, Chrome и Safari - как для XML, так и для text/htmlсериализации - не разрешают переопределение кодировки всякий раз, когда страница включает спецификацию. [2]

Для документов HTML, сериализованных с предпочтительной меткой XML - application/xhtml+xml, ручное переопределение кодирования не допускается. Переопределение кодировки такого XML-документа означало бы, что этот документ перестал быть XML, поскольку для XML-документов фатальной ошибкой является наличие объявления кодировки с обнаруживаемыми ошибками. В настоящее время браузеры Gecko, такие как Firefox, соблюдают это правило, тогда как большинство других распространенных браузеров, поддерживающих HTML как XML, например браузеры Webkit (Chrome / Safari) [3] , позволяют вручную переопределять кодировку документов XHTML. .

Поддержка веб-браузера [ править ]

Многие браузеры способны отображать лишь небольшую часть полного репертуара Unicode. Вот как ваш браузер отображает различные кодовые точки Unicode:

Некоторые веб-браузеры, такие как Mozilla Firefox , Opera , Safari и Internet Explorer (начиная с версии 7), могут отображать многоязычные веб-страницы, разумно выбирая шрифт для отображения каждого отдельного символа на странице. Они будут правильно отображать любое сочетание блоков Unicode , если в операционной системе присутствуют соответствующие шрифты .

Старые браузеры, такие как Netscape Navigator 4.77 и Internet Explorer 6 , могут отображать только текст, поддерживаемый текущим шрифтом, связанным с кодировкой символов страницы, и могут неверно интерпретировать числовые ссылки на символы как ссылки на значения кода в текущей кодировке символов, а скорее чем ссылки на кодовые точки Unicode. Когда вы используете такой браузер, маловероятно, что на вашем компьютере есть все эти шрифты или что браузер может использовать все доступные шрифты на одной странице. В результате браузер не будет правильно отображать текст в приведенных выше примерах, хотя может отображать их подмножество. Поскольку они закодированы в соответствии со стандартом, они будутправильно отображать в любой системе, которая совместима и имеет доступные символы. Кроме того, те символы, которым присвоены имена для использования в ссылках на именованные сущности, вероятно, будут более доступны, чем другие.

Для отображения символов за пределами базовой многоязычной плоскости , таких как готическая буква faihu, которая является вариантом рунической буквы fehu в таблице выше, некоторые системы (например, Windows 2000) нуждаются в ручной настройке их настроек.

Частота использования [ править ]

Согласно внутренним данным веб-индекса Google , в декабре 2007 года кодировка Unicode UTF-8 стала наиболее часто используемой кодировкой на веб-страницах, обогнав как ASCII (США), так и 8859-1 / 1252 (западноевропейские). [4]

См. Также [ править ]

  • Файл справки по использованию специальных символов в Википедии
  • Кодировки символов в HTML
  • Обнаружение кодировки
  • Справочник по символам Юникода (викиучебники)

Ссылки [ править ]

  1. ^ Ян Хиксон (2011). «HTML5» . Проверено 17 сентября 2011 года . Авторам рекомендуется использовать UTF-8. Специалисты по проверке соответствия могут посоветовать авторам не использовать устаревшие кодировки. [RFC3629] Инструменты разработки должны по умолчанию использовать UTF-8 для вновь создаваемых документов. [RFC3629]
  2. ^ Ошибка 12897 - В некоторых парсерах спецификация UTF-8 превосходит атрибут кодировки HTTP (алгоритм сниффинга кодирования)
  3. ^ Ошибка 66189 - синтаксический анализатор XML не выдает FATAL ERROR для всех обнаруживаемых ошибок кодирования
  4. ^ Марк Дэвис : Переход на Unicode 5.1 Официальный блог Google, 5 мая 2008 г.

Внешние ссылки [ править ]

  • Unicode в XML и других языках разметки - совместная публикация консорциума W3C и Unicode, в которой описаны проблемы и приведены рекомендации, касающиеся Unicode в языках разметки.
  • Определения именованных символов Latin-1 , "Special" , а также математические, греческие и символические для HTML 4.01
  • UnicodeMap.org - просмотр символов Unicode, диапазонов и другой информации.
  • Бесплатные шрифты, редакторы и документация SIL
  • Ресурсы Unicode Алана Вуда - шрифты и информация Unicode.
  • http://www.phon.ucl.ac.uk/home/wells/ipa-unicode.htm Международный фонетический алфавит в Юникоде
  • http://www.alanwood.net/unicode/cjk_compatibility_ideographs.html Идеографы совместимости CJK
  • http://www.unicode.org/charts/ символьные диаграммы Unicode; только шестнадцатеричные числа; PDF-файлы, отображающие все символы независимо от возможностей браузера
  • Таблица символов Unicode от 1 до 65535 - показывает, как они выглядят в браузере
  • Веб-инструмент, преобразующий "специальные" символы (например, китайские символы) в ссылки на числовые символы Юникода.
  • Многоязычные веб-страницы и Unicode - как исправить проблемы с отображением
  • w3.org через web.archive.org - Исходный справочник цитирования HTML5, сохраненный через Wayback Machine