Кодировки символов в HTML
Язык разметки 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,0 1,1 HTML 4, HTML Document Representation: Specifying the character encoding(англ.)
- ↑ https://www.w3.org/TR/html51/syntax.html#character-encodings(англ.)
- ↑ Такого же, как (например) требования к электрику иметь соответствующую профессиональную подготовку.
- ↑ https://encoding.spec.whatwg.org/#legacy-hooks(англ.) (автор: Anne van Kesteren)
- ↑ 12.2.3.3 Character encodings. WHATWG.(англ.)
- ↑ Encoding Standard title=14.1: replacement (автор: Anne van Kesteren)
Кодировки символов | ||
---|---|---|
Основы | Алфавит • текст • набор символов • конверсия | |
Исторические кодировки | Докомп.: | семафорная (Макарова) • Морзе • Бодо • МТК-2 |
Комп.: | 6-битная • УПП • RADIX-50 • EBCDIC ( ДКОИ-8 ) • КОИ-7 • ISO 646 | |
современное 8-битное представление |
символы | ASCII ( управляющие • печатные ) |
8-битные код.стр. | ISO 8859 • кириллица (КОИ-8 • ГОСТ 19768-87 • MacCyrillic) | |
Windows | 1250 • 1251 (кир.) • 1252 • 1253 • 1254 • 1255 • 1256 • 1257 • 1258 • WGL4 | |
IBM & DOS | 437 • 850 • 852 • 855 • 866 «альт.» • МИК • НИИ ЭВМ | |
Многобайтные | Традиционные | DBCS ( GB 2312 ) • HTML |
Unicode | UTF • список символов (кириллица • латиница) | |
Связанные темы | интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • кракозябры • транслит • нестандартные шрифты |