Кодировки символов в HTML

Материал из Циклопедии
Перейти к навигации Перейти к поиску
HTML
HTML и HTML5
Динамический HTML
XHTML
XHTML Mobile Profile[en] и CHTML
Document Object Model
Семейство шрифтов
Кодировки символов
Мнемоники в HTML
Редактор HTML
Элементы HTML
Семантическая вёрстка
Карта изображений
Цвета HTML
Формы HTML
Фреймы HTML
HTML5 audio и HTML5 video
Canvas
Скрипты в HTML
Unicode и HTML[en]
Браузерный движок
Quirks mode
Каскадные таблицы стилей
W3C и WHATWG
Web Storage
WebGL
Сравнение
языков разметки документов
браузерных движков

Язык разметки HTML хорошо приспособлен для поддержки различных письменностей и кодировок текста, что может быть достигнуто как при содействии со стороны протокола передачи документа (такого, как HTTP), так и реализовано внутренними средствами HTML. В силу различных причин работа с кодировками в HTML более сложна, нежели просто «декодировать полученный текст и интерпретировать его, как HTML».

Версия стандарта HTML 5 рекомендует Юникод (в его формах UTF-8 и UTF-16) для составления документов, что, однако, не означает, что браузерам разрешено забыть про существование альтернатив. Правильно отданная в кодировке UTF-8 страница будет декодирована любой сколь-нибудь актуальной на настоящее время (2021 год) версией браузера. Однако, корректное декодирование не гарантирует корректное отображение. Проблемы, столкновение с которыми вероятно для пользователя в этом случае, могут быть вызваны отсутствием некоторых символов в доступных шрифтах, а также недостаточной поддержкой отдельных письменностей (например, среда пользователя, настроенная на русский язык, не обязана аккуратно отобразить текст по-арабски, даже если символы имеются в шрифте).

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

По историческим причинам сосуществование в информационной среде нескольких кодировок текста было источником раздражающих ошибок и путаницы. В 2000-х годах главными средствами определения кодировки HTML-документов были заголовки протокола HTTP(s), подглядывание в заголовок HTML, угадывание (эвристика), а также указание пользоватем через меню. Из-за хронически неправильных настроек веб-серверов Консорциум Всемирной паутины утратил доверие к заголовкам HTTP(s).[1]

Группа WHATWG представила список, якобы исчерпывающий, допустимых в HTML кодировок.[2] На практике многие современные браузеры (в частности, производства Mozilla, являющейся членом WHATWG) без проблем показывают не входящую в список кодировку КОИ-8 и некоторые другие.

Заголовки сервера[править]

Сервер, отдающий документ (по HTTP либо HTTPS), обязан сообщить, как он закодирован перед собственно данными. С точки зрения нормативов (таких, как RFC 2616) Инженерного совета начала 2000-х годов, данное указание относительно кодировки является приоритетным. Однако, этот способ не применим к документам, доставляемым без заголовков (с локального файла, по сетевой файловой системе, и т. д.).

Более того, данный способ требует наличия хотя бы базовой способности администратора серверного ПО разобраться с его настройками, что (на протяжение второй половины 1990-х годов) сместилось из области требования само самой разумеющегося[3] в область утопии.

Подглядывание в заголовок HTML[править]

Элемент <META> заголовка HTML-документа может содержать данные в формате серверных заголовков:
<META http-equiv="Content-Type" content="text/html; charset=имя-кодировки">
Такие данные могут извлекаться сервером и передаваться, как заголовки, при выдаче документа, но на практике это делается редко. Разработчики HTML 4 в 1997 году призвали разработчиков браузеров ориентироваться непосредственно на <META>[1] что, в принципе, является нарушением появившейся в том же году спецификации HTTP/1.1 (однако, отражало реалии Интернета 1997–1998 годов).

Стандарт HTML 5 добавил ещё одну подобную конструкцию:
<meta charset="имя-кодировки">

«Legacy hooks» от WHATWG и эвристические способы[править]

Современные браузеры заглядывают также в первые три октета полученного документа (сразу после заголовка HTTP, если таковой имеется) и принимают решение о кодировке согласно описанному на [4] «стандарту» от WHATWG. Любопытно, что документ признаёт нарушение семантики протокола HTTP, допускаемое этой процедурой (англ. where HTTP is used this is in violation of the semantics of the Content-Type header). При загрузке собственно HTML-документа это не должно приводить к ошибкам, но может привести к абсурдным результатам для text/plain (чисто текстового).

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

Запрещённые кодировки[править]

К кодировкам, запрещённым к применению с HTML (версией стандарта 5), относятся CESU-8, UTF-7, BOCU-1, SCSU, UTF-32 (все пять — редко используемые представления Юникода), EBCDIC,[5] HZ-GB-2312, а также некоторые некоторые кодовые страницы стандарта ISO 2022.[6] Запрет обусловлен соображениями информационной безопасности.

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

Используя префикс — символ & (амперсанд), в HTML можно закодировать любой символ, представленный в Юникоде. Этот синтаксис исходного кода использует (помимо амперсанда) лишь 26 латинских букв в двух вариантах (прописные и строчные), десять цифр, знак «;» в качестве завершающего, а также символ «#» для указания численных кодов.

Примеры представления конкретных символов можно найти, например, на https://unicode-table.com/ru/html-entities/

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

Источники[править]

  1. 1,0 1,1 HTML 4, HTML Document Representation: Specifying the character encoding(англ.)
  2. https://www.w3.org/TR/html51/syntax.html#character-encodings(англ.)
  3. Такого же, как (например) требования к электрику иметь соответствующую профессиональную подготовку.
  4. https://encoding.spec.whatwg.org/#legacy-hooks(англ.) (автор: Anne van Kesteren)
  5. 12.2.3.3 Character encodings. WHATWG.(англ.)
  6. Encoding Standard title=14.1: replacement (автор: Anne van Kesteren)
Кодировки символов
Основы Алфавиттекстнабор символовконверсия
Исторические кодировки Докомп.: семафорная (Макарова)МорзеБодоМТК-2
Комп.: 6-битнаяУППRADIX-50EBCDICДКОИ-8 ) • КОИ-7ISO 646
современное
8-битное
представление
символы ASCIIуправляющиепечатные )
8-битные код.стр. ISO 8859 • кириллица (КОИ-8ГОСТ 19768-87MacCyrillic)
Windows 12501251 (кир.)1252125312541255125612571258WGL4
IBM & DOS 437850852855866 «альт.»МИКНИИ ЭВМ
Многобайтные Традиционные DBCSGB 2312 ) • HTML
Unicode UTFсписок символов (кириллица • латиница)
Связанные темы интерфейс пользователяраскладка клавиатурылокальперевод строкикракозябрытранслитнестандартные шрифты