Юникод и HTML
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
HTML |
---|
Сравнения |
Веб-страницы, созданные с использованием языка гипертекстовой разметки ( HTML ), могут содержать многоязычный текст, представленный универсальным набором символов Unicode. Ключом к взаимосвязи между Unicode и HTML является взаимосвязь между «набором символов документа», который определяет набор символов, которые могут присутствовать в документе HTML, и присваивает им номера, и «внешней кодировкой символов» или «набором символов». ", используемый для кодирования данного документа как последовательности байтов.
В RFC 1866, первоначальном стандарте HTML 2.0, набор символов документа был определен как ISO-8859-1 (более поздний стандарт HTML по умолчанию использует кодировку Windows-1252 ). Он был расширен до ISO 10646 (который по сути эквивалентен Unicode) РФК 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 представляет собой последовательность символов Юникода. Однако документ XHTML — это документ XML , который, хотя и не имеет явного уровня абстракции «символа документа» , тем не менее, опирается на аналогичное определение допустимых символов, которое охватывает большинство, но не все определения символов Unicode/UCS. Наборы, используемые HTML и XHTML/XML, немного различаются, но эти различия мало влияют на обычного автора документа.
Независимо от того, является ли документ HTML или XHTML, при хранении в файловой системе или передаче по сети символы документа кодируются как последовательность битовых октетов ( байтов ) в соответствии с определенной кодировкой символов. Эта кодировка может быть либо форматом преобразования Юникода , например UTF-8 , который может напрямую кодировать любой символ Юникода, либо устаревшей кодировкой, например Windows-1252 , которая не может. Однако даже при использовании кодировок, которые не поддерживают все символы Юникода, в закодированном документе могут использоваться числовые ссылки на символы . Например, ☺
(☺) используется для обозначения символа улыбающегося лица в наборе символов Юникода.
Кодировка символов [ править ]
Чтобы поддерживать все символы Юникода, не прибегая к ссылкам на числовые символы, веб-страница должна иметь кодировку, охватывающую весь Юникод. Наиболее популярной является UTF-8 , в которой символы ASCII , такие как английские буквы, цифры и некоторые другие распространенные символы, сохраняются неизменными по сравнению с ASCII. Это делает HTML-код (например, <br> и </div>) неизменным по сравнению с ASCII. Символы вне диапазона ASCII хранятся в 2–4 байтах. Также можно использовать UTF-16 , где большинство символов хранятся в виде двух байтов с разным порядком байтов , что поддерживается современными браузерами, но используется реже.
Ссылки на числовые символы [ править ]
Чтобы обойти ограничения устаревших кодировок, HTML спроектирован таким образом, чтобы можно было представлять символы из всего Юникода внутри документа HTML с помощью числовой ссылки на символы : последовательности символов, которые явно обозначают кодовую точку Юникода. изображаемого персонажа. Ссылка на символ принимает форму &#
Н ;
, где N — либо десятичное число для кодовой точки Юникода, либо шестнадцатеричное число, и в этом случае перед ним должен стоять префикс x
. Символы, составляющие цифровую ссылку на символ, универсально представлены в любой кодировке, одобренной для использования в Интернете. [ нужна ссылка ]
Поддержка шестнадцатеричных чисел в этом контексте появилась позже, поэтому в старых браузерах могут возникнуть проблемы с отображением символов, связанных с шестнадцатеричными числами, но у них, вероятно, в любом случае возникнут проблемы с отображением символов Юникода выше кодовой точки 255. Чтобы обеспечить лучшую совместимость со старыми браузерами, по-прежнему распространенной практикой является преобразование шестнадцатеричного кода в десятичное значение (например, 合
вместо 合
). [ нужна ссылка ]
Именованные персонажи [ править ]
В HTML 4 существует стандартный набор из 252 именованных объектов для символов — некоторые общие, некоторые неясные — которые либо не встречаются в определенных кодировках символов, либо чувствительны к разметке в некоторых контекстах (например, угловые скобки и кавычки). Хотя на любой символ Юникода можно ссылаться по его числовому коду, некоторые авторы HTML-документов предпочитают вместо этого использовать эти именованные объекты, где это возможно, поскольку они менее загадочны и лучше поддерживаются ранними браузерами.
Символьные сущности могут быть включены в HTML-документ с помощью ссылок на сущности , которые принимают форму &
имя сущности ;
, где EntityName — имя сущности. Например, —
, очень похоже —
или —
, представляет U+ 2014 : символ длинного тире «—», даже если используемая кодировка символов не содержит этот символ.
Полный список см. в разделе Список ссылок на символьные сущности XML и HTML .
Определение кодировки символов [ править ]
Чтобы правильно обрабатывать HTML, веб-браузер должен выяснить, какие символы Юникода представлены в закодированной форме HTML-документа. Для этого веб-браузер должен знать, какая кодировка использовалась.
Информация о кодировании [ править ]
Когда документ передается через сообщение MIME или транспорт, который использует типы контента MIME, такие как ответ HTTP , сообщение может сигнализировать о кодировке через заголовок Content-Type, например Content-Type: text/html; charset=UTF-8
. Другие внешние средства объявления кодировки разрешены, но используются редко. Если в документе используется кодировка Unicode , информация о кодировке также может присутствовать в виде метки порядка байтов (BOM). Наконец, кодировку можно объявить с помощью синтаксиса 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. Метаатрибут не играет никакой роли в HTML, обслуживаемом как XML.
Кодировка по умолчанию [ править ]
Кодировка по умолчанию применяется, когда нет внешнего или внутреннего объявления кодировки, а также нет отметки порядка байтов. Хотя кодировка по умолчанию для HTML-страниц, обслуживаемых как XML, должна быть UTF-8, кодировка по умолчанию для обычной веб-страницы (то есть: для HTML-страниц, сериализованных как text/html
) варьируется в зависимости от локализации браузера. Для системы, настроенной в основном для западноевропейских языков, обычно это Windows-1252 . Для локалей с кириллицей обычно используется значение по умолчанию Windows-1251 . Для браузера из региона, где преобладают устаревшие многобайтовые кодировки символов, вероятно, будет применена некоторая форма автоматического обнаружения.
тенденций Кодирование
Из-за наследия 8-битных представлений текста в языках программирования и операционных системах , а также из-за желания не обременять пользователей необходимостью понимать нюансы кодирования, многие текстовые редакторы, используемые авторами HTML, не могут или не хотят предлагать выбор кодировок. при сохранении файлов на диск и часто даже не позволяют вводить символы за пределами очень ограниченного диапазона. Следовательно, многие авторы HTML не знают о проблемах с кодировкой и могут не иметь ни малейшего представления о том, какая кодировка на самом деле используется в их документах. Недоразумения, такие как убеждение, что объявление кодировки влияет на изменение фактической кодировки (хотя на самом деле это просто метка, которая может быть неточной), также являются причиной такого отношения редактора. Еще одним фактором, способствующим тому же направлению, является появление UTF-8, который значительно уменьшает потребность в других кодировках, и поэтому современные редакторы склонны использовать стандартные кодировки, рекомендованные спецификацией HTML5. [1] в UTF-8.
Метка порядка байтов/прослушивание Unicode [ править ]
Для обеих сериализаций HTML (тип контента «text/html» и тип контента «application/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 – против ручного переопределения.
Для HTML-документов, которые text/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:
Характер | Ссылка на HTML-символ | Имя в Юникоде | Что отображает ваш браузер |
---|---|---|---|
U + 0041 | A или A | Латинская заглавная буква А | А |
U + 00DF | ß или ß | Латинская строчная буква Sharp S | SS |
U + 00FE | þ или þ | Латинская строчная буква Торн | то есть |
U + 0394 | Δ или Δ | Греческая заглавная буква Дельта | Д |
U + 017D | Ž или Ž | Латинская заглавная буква Z с крючком | Ж |
U + 0419 | Й или Й | Кириллическая заглавная буква Короткая I | И |
U + 05E7 | ק или ק | Еврейская буква Человек | К |
U + 0645 | م или م | Арабская буква Мим | М |
U + 0E57 | ๗ или ๗ | Тайская цифра 7 | ๗ |
U + 1250 | ቐ или ቐ | Геэз слог Qha | с |
U + 3042 | あ или あ | Хирагана буква А (японский) | а |
U + 53F6 | 叶 или 叶 | Унифицированный иероглиф CJK -53F6 ( упрощенный китайский «Лист») | лист |
U + 8449 | 葉 или 葉 | CJK Unified Ideograph -8449 ( традиционный китайский «Лист») | лист |
U + B5AB | 떫 или 떫 | хангыль Слог Ттеолп (корейский «Ssangtikeut Eo Rieulbieup») | Вяжущий |
U + 16A0 | ᚠ или ᚠ | Руническая буква Феху | ᚠ |
U + 0D37 | ഷ или ഷ | Буква малаялам ഷ (ṣha) | Ш |
U + 1F602 | 😂 или 😂 | Лицо со слезами радости смайлик | 😂 |
Чтобы отобразить все символы, указанные выше, вам может потребоваться установить один или несколько крупных многоязычных шрифтов, например Code2000 . |
Некоторые веб-браузеры, такие как Mozilla Firefox , Opera , Safari и Internet Explorer (начиная с версии 7), способны отображать многоязычные веб-страницы, разумно выбирая шрифт для отображения каждого отдельного символа на странице. Они будут корректно отображать любое сочетание блоков Юникода , если соответствующие шрифты присутствуют в операционной системе .
Старые браузеры, такие как Netscape Navigator 4.77 и Internet Explorer 6 , могут отображать только текст, поддерживаемый текущим шрифтом, связанным с кодировкой символов страницы, и могут ошибочно интерпретировать ссылки на числовые символы как ссылки на значения кода в текущей кодировке символов, а не как ссылки на кодовые значения в текущей кодировке символов. чем ссылки на кодовые точки Unicode. Когда вы используете такой браузер, маловероятно, что на вашем компьютере есть все эти шрифты или что браузер сможет использовать все доступные шрифты на одной странице. В результате браузер не будет корректно отображать текст в приведенных выше примерах, хотя и может отображать их подмножество. Однако, поскольку они закодированы в соответствии со стандартом, они будут корректно отображаться в любой системе, которая совместима с ним и имеет доступные символы. Кроме того, эти символы, которым даны имена для использования в ссылках на именованные сущности, вероятно, будут более доступны, чем другие.
Для отображения символов за пределами базовой многоязычной плоскости , таких как готическая буква файху, которая является вариантом рунической буквы феху в таблице выше, в некоторых системах (например, Windows 2000) требуется ручная корректировка их настроек.
Частота использования [ править ]
Согласно внутренним данным веб-индекса Google , в декабре 2007 года кодировка Unicode UTF-8 стала наиболее часто используемой кодировкой на веб-страницах, обогнав как ASCII (США), так и 8859-1 / 1252 (западноевропейская). [4]
См. также [ править ]
- Файл справки по использованию специальных символов в Википедии
- Кодировки символов в HTML
- Обнаружение кодировки
- Справочник символов Юникода (викибуки)
Ссылки [ править ]
- ^ Ян Хиксон (2011). «HTML5» . Проверено 17 сентября 2011 г.
Авторам рекомендуется использовать UTF-8. Специалисты по проверке соответствия могут посоветовать авторам не использовать устаревшие кодировки. [RFC3629] Инструменты разработки должны по умолчанию использовать UTF-8 для вновь создаваемых документов. [RFC3629]
- ^ «12897 — в некоторых парсерах спецификация UTF-8 превосходит атрибут кодировки HTTP (алгоритм анализа кодировки)» . www.w3.org . Проверено 9 марта 2023 г.
- ^ «66189 — анализатор XML не выдает НЕУСТРАНИМУЮ ОШИБКУ для всех обнаруживаемых ошибок кодирования» . bugs.webkit.org . Проверено 9 марта 2023 г.
- ^ Марк Дэвис : Переход на Unicode 5.1. Официальный блог Google, 5 мая 2008 г.
Внешние ссылки [ править ]
в этой статье Использование внешних ссылок может не соответствовать политике и рекомендациям Википедии . ( Апрель 2020 г. ) |
- Unicode в XML и других языках разметки — совместная публикация Консорциума W3C и Unicode, в которой описываются проблемы и приводятся рекомендации, касающиеся Unicode в языках разметки.
- Latin-1 , «Special» , а также математических, греческих и символических символов для HTML 4.01. Определения объектов именованных символов
- UnicodeMap.org — просмотр символов, диапазонов и другой информации Юникода.
- Бесплатные шрифты, редакторы и документация 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/ Таблицы символов Юникода; только шестнадцатеричные числа; PDF-файлы, показывающие все символы, независимо от возможностей браузера.
- Таблица символов Юникода от 1 до 65535. Архивировано 3 ноября 2007 г. на Wayback Machine - показывает, как они выглядят в браузере.
- Веб-инструмент, преобразующий «специальные» символы (например, китайские символы) в числовые ссылки на символы Юникода.
- Многоязычные веб-страницы и Unicode – как исправить проблемы с отображением
- w3.org через web.archive.org — исходный справочник по цитированию HTML5, сохраненный через Wayback Machine.