Ускоряющая клавиша n предназначена для пропусков при навигации по страницам. Пропуск для перехода на начало контента.

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

Переводчик: Alexandr, Art life

s_gotoW3cHome Internationalization
 

Кодирование символов: Основные понятия

Предполагаемая аудитория: шифровальщики XHTML / HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), шифровальщики CSS, и каждый, кто не знаком с терминологией кодировки символов и хочет понять ее основы.

Данная статья содержит ряд основных понятий, необходимых для понимания других статей, касающихся символов и кодировки символов.

Unicode

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

Текст на компьютере или в Сети состоит из символов. Символы представляют буквы алфавита, знаки препинания или иные символы.

В прошлом, различные организации собрали различные наборы символов и создали кодирования для них - один набор может включать только основанные на Латине западноевропейские языки (за исключением таких стран ЕС как Болгария или Греция), другой может охватывать, в частности, Дальневосточный язык (такой как Японский) , другие могут быть одним из многих наборов разработанных в довольно специальный способ для представления другого языка где-то в мире.

К сожалению, вы не можете гарантировать ни того, что ваше приложение будет поддерживать все кодировки, ни того, что данное кодирование будет поддерживать все ваши потребности для представления данного языка. Кроме того, как правило, невозможно объединить различные кодировки на той же странице или в базе данных, поэтому, как правило, очень трудно поддерживать многоязычные страницы, используя подходы 'наследования' для кодирования.

Unicode Консорциум обеспечивает большой, единый набор символов, который направлен для включения всех символов, необходимых для любой системы письма в мире, включая древние скрипты (такие как Клинопись, Готика и Египетские Иероглифы). В настоящее время он является основным для архитектуры сети и операционных систем, и поддерживается всеми основными веб-браузерами и приложениями. Стандарт Unicode также описывает свойства и алгоритмы для работы с символами.

Такой подход облегчает работу с многоязычными страницами или системами, и обеспечивает гораздо лучшее покрытие ваших потребностей, чем большинство традиционных систем кодирования.

Ниже показаны скрипт блоки Unicode, как Unicode 5.2-й версии:

блоки Unicode

Первые 65,536 позиций точки кода в наборе символов Unicode называется Базовая Многоязыковая Плоскость (BMP). BMP включает в себя большинство часто используемых символов.

Номер 65,536 это 2 в 16 степени. Иными словами, максимальное число подстановок битов, которые вы можете получить в двух байтах.

Набор символов Unicode также имеет место для около миллиона дополнительных позиций точки кода. Символы в этом последнем диапазоне называют дополнительные символы.

Иллюстрация 17 плоскостей в кодировке Unicode.

Для получения дополнительной информации о Unicode, смотрите Домашняя страница Unicode, или читайте пособие Введение в Системы Писания и Unicode.

Наборы символов, закодированные наборы символов и кодировки

Важно четко понимать разницу между понятиями набор символов и кодировка символов.

character set (набор символов) или repertoire (репертуар) включает в себя символы, которые можно было бы использовать для конкретной цели - те, которые нужны для поддержания западноевропейских языков на компьютерах, или те, что китайский ребенок будет учить в школе в третьем классе (ничего общего с компьютерами).

coded character set (акодированный набор символов) - набор символов в котором уникальный номер был присвоен каждому символу. Единицы закодированного набора символов известны как точки кода. Значение точки кода представляет позицию символа в закодированном наборе символов. Например, точка кода для буквы Г  в кодировке символов Unicode ровно 225 в десятичной, или E1 в шестнадцатеричной системе счисления. (Заметим, что шестнадцатеричная система счисления обычно используется для названия точки кода, и будет здесь использоваться.)

Закодированные наборы символов порой называют code pages (кодовые страницы).

character encoding (кодирование символов) отражает способ в который закодирован набор символов отображается в байтах для манипуляций на компьютере. На рисунке ниже показано, как символы и точки кода в скрипте Тифинаг (Берберский язык) отображаются в последовательности байтов в памяти с помощью кодировки UTF-8. Значение точки кода для каждого символа перечислены непосредственно ниже глифа (т.е. визуальное представление) для того символа в верхней части диаграммы. Стрелки показывают, как точки кода переходят в последовательности байтов, где каждый байт представлен двузначным шестнадцатеричным числом. Обратите внимание, как Тифинаг отражает точки кода тремя байтами, в то время, как восклицательный знак отражает одним байтом.

Картина того, как символы отображаются байтами.

Это объяснение представляет в лучшем виде некоторые детализированные номенклатуры, связанные с кодировкой. Более подробную информацию можно найти в Техническом Докладе Unicode #17.

Один набор символов, несколько кодировок. Много стандартов кодирования символов, таких как в ISO 8859-й серии, используют один байт для данного символа и кодирования является прямым отображением для скалярного положения символов в закодированном наборе символов. Например, буква A в кодировке символов ISO 8859-1 находится на 65-й позиции символов (начиная с нуля), и закодирована используя байт со значением 65 для представления на компьютере. Для ISO 8859-1 это никогда не меняется.

Однако для Unicode не всё так просто. Хотя место кода для буквы Г  в кодировке символов Unicode всегда ровно 225 (в десятичной системе), в UTF-8 он представлен на компьютере двумя байтами. Иными словами, это не тривиально, взаимное отражение между значением кодирования набора символов и закодированным значением для этого символа.

Кроме того, в Unicode есть несколько способов кодирования одного и того же символа. Например, буква Г  может быть представлена двумя байтами в одной кодировке и четырьмя байтами в другой. Формы кодирования которые могут использоваться с Unicode называются UTF-8, UTF-16, и UTF-32.

Картина того, как символы отображаются байтами.

UTF-8 использует 1 байт для представления символов в наборе ASCII, два байта для символов в несколько алфавитных блока, и три байта для остальных BMP. Дополнительные символы используют 4 байта.

UTF-16 использует 2 байта для любого символа в BMP, и 4 байта для дополнительных символов.

UTF-32 использует 4 байта для всех символов.

В следующей таблице, в первой строке чисел представлена позиция символа в кодировке Unicode. Другие строки показывают значения байтов, используемых для представления этого символа в определенной кодировке символов.

Latin A. Hebrew alef. Han ideograph AN. Значение китайского иероглифа 'обрубок дерева'.
Место кода U+0041 U+05D0 U+597D U+233B4
UTF-8 41 D7 90 E5 A5 BD F0 A3 8E B4
UTF-16 00 41 05 D0 59 7D D8 4C DF B4
UTF-32 00 00 00 41 00 00 05 D0 00 00 59 7D 00 02 33 B4

Для получения дополнительной информации о символах и кодировании смотрите Представляя Наборы Символов и Кодирование, или читайте пособие Обработка кодирования символов в HTML и CSS .

Набор символов документа

Для XML и HTML (начиная с версии 4,0 и выше) набор символов документа называется Универсальный Набор символов (UCS) как это определено обеими стандартами ISO / IEC 10646 и Unicode. (Для простоты и в соответствии с общепринятой практикой, мы будем называть UCS здесь просто как Unicode.)

Что это означает, то что логическая модель, которая описина в терминах набора символов, которая описывает как обрабатываются XML и HTML определяется Unicode. (С практической точки зрения это означает, что браузеры обычно превращают весь текст в Unicode внутренне.)

Заметим, что это не означает, что все HTML и XML документы должны использовать кодировку Unicode! Однако это означает то, что документы могут содержать только символы определенные Unicode. Любое кодирование может использоваться для вашего документа до тех пор, пока оно правильно назначенное и представляет собой подмножество набора символов Unicode.

Для получения дополнительной информации о наборе символов документа смотрите статью Набор символов документа.

Экранированные Символы

Экранированный символ - способ представления символа без его фактического использования.

Например, не существует способа непосредственного представления такого символа Иврита, как Чђ в документе, если вы используете кодировку ISO 8859-1 (которая охватывает западноевропейские языки). Один из способов, чтобы указать, что вы хотите включить этот символ является использование такого экранированного символа XHTML, как א. Поскольку набором символов документа является Unicode, клиентское приложение должно распознать, что это представляется такой символ Иврита, как Алеф.

Примеры экранированных символов в HTML / XHTML и CSS, а также советы о том, когда и как их использовать, можно найти в статье Использование экранированных символов в разметке и CSS.

Заголовок HTTP

При получении документа с сервера, сервер обычно отправляет некоторую дополнительную информацию с документом. Это называется заголовком HTTP. Вот пример такого рода информации о документе, который передается по заголовке HTTP документу, как он перемещается от сервера к клиенту.

Вторая строка снизу в данном примере несет информацию о кодировке документа.

HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html
Vary: negotiate,accept-language,accept-charset
TCN: choice
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600
Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT
ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Language: en

Если документ создается динамически с помощью скриптов, вы точно сможете добавить эту информацию в заголовок HTTP. Если вы обслуживаете статические файлы, сервер может связать эту информацию с файлами. Способ настройки сервера для передачи информации о кодировке символов таким образом будет варьироваться от сервера к серверу. Поэтому вы должны узнать о нем у администратора сервера.

Как, пример, Apache серверы обычно предоставляют кодировку по умолчанию, обычно можно переопределить пользовательскими настройками. Например, пользователь может добавить следующую строку в .htaccess файл для обслуживания всех файлов с расширением .html как UTF-8 в этой и всех дочерних директориях:

AddType 'text/html; charset=UTF-8' html

Для получения дополнительной информации об изменении кодировки в заголовке HTTP, смотрите Настройка HTTP charset параметра

Другие вещи

Смотрите Обслуживание HTML и XHTML для получения информации о связанных с ними понятиях, в том числе MIME типы, стандартные режимы по сравнению с режимами совместимости, and DOCTYPEs.

Выскажите своё мнение (по-английски).

Подпишитесь на ленту новостей RSS.

Новые публикации

Новости главной страницы

Twitter (Новости главной страницы)

‎@webi18n

Дополнительные материалы

Автор: Richard Ishida, W3C. Переводчик: Alexandr, Art life.

Допустимый XHTML 1.0!
Допустимый CSS!
Кодировка UTF-8!

Перевод с английского: 2010-08-20. Последнее внесение изменений в перевод: 2011-03-15 23:30 GMT

Для просмотра истории внесения изменений нажмите article-definitions-characters в блоге i18n.