Надо Знать

добавить знаний



Юникод



План:


Введение

Юникод ( англ. Unicode ), Унифицированный Кодирование - это промышленный стандарт, разработанный, чтобы обеспечить цифровое представление символов всех письменностей мира и специальных символов. Усовершенствованный совместно со стандартом Универсальный Набор символов (Universal Character Set - UCS) и опубликован в форме книги Стандарт Юникод Юникод состоит из ассортимента символов, методологии кодирования и комплекта (набора) стандартов кодировку, комплект кодовых таблиц для ссылок на изображения символов, списка свойств символов таких, например, как верхний и нижний регистр, комплект справочных данных компьютерных файлов, правил нормализации, декомпозиции, сопоставления и изображения ( рендеринга).

Стандарт предложила в 1991 году организация Консорциум Юникода ( англ. Unicode Consortium ), Объединяющей крупнейшие ИТ - компании (корпорации). Консорциум Юникода - неприбыльная (некоммерческая) организация, координирующая развитие Юникода, имеет амбициозную цель заменить в конечном итоге существующие системы кодирования символов Юникод и его системой стандартов Формат превращений Юникода (UTF, Unicode Transformation Format), потому что многие существующие систем кодирования ограничены в размере и возможностях и несовместимыми с многоязычными средами. Успехи Юникода в унификации наборов символов привели к его распространения и доминирующего использования в интернационализации и локализации программного обеспечения компьютеров. Стандарт был использован во многих новейших технологиях, например, в XML, языке программирования JavaScript и современных операционных системах.

Юникод снимает старое ограничения на кодировку только одним байтом. Зато используется 17 пространств, каждый из которых определяет 65,536 кодов и дает возможность описать максимум 1 114 112 (17 * 2 16) различных символов. Basic Multilingual Plane (BMP) - Основная Многоязычная Плоскость содержит почти все символы, которые вы будете когда-либо использовать.

Юникод имеет несколько реализаций, но наиболее распространенными являются две: UTF (Unicode Transformation Format) - формат Преобразование Юникода и UCS (Universal Character Set) - Универсальная Таблица символов. Число после UTF определяет количество бит выделенных под один юнит, а число после UCS определяет количество байтов. Универсальный набор символов задает однозначное соответствие символов кодам - элементам кодового пространства, т.е. неотъемлемым целым числам. UTF-8 стал самым распространенным для интернациональных кодировок.

UTF-8 является системой кодирования с переменной длиной кодировку. Это означает, что для кодирования символов он использует от 1 до 4 байт на символ. Так, первый байт UTF-8 можно использовать для кодирования ASCII, что дает полную совместимость с кодами ASCII. Перекодировки кодов ASCII в кодах UTF-8 для латинских символов не увеличит размер данных, так как для этого используется только один байт на символ. Для символов других языков, где, например, для кодирования надо использовать два байта на символ, это кодирование увеличивает размер данных на, примерно, 50% или более.

UTF-8 позволяет работать в стандартизированном международно принятом многоязычной среде, со сравнительно незначительным увеличением объема данных. UTF-8 представляет собой идеальный способ передачи символов через Интернет, электронную почту, чат и т.д..

Коды в стандарте Unicode разделены на несколько областей. Область с кодами от U +0000 до U +007 F (о записи вида "U + xxxx" см. ниже в разделе "Кодовый пространство") содержит символы набора ASCII. Далее размещены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем. Для символов кириллицы выделены коды от U +0400 до U +052 F (см. Кириллица в кодировке Unicode).


1. Разделы стандарта Юникод

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

Стандарты наборов символов:

UCS-4 (англ. Universal Character Set) - 1 символ = 4 байта, всего можно закодировать 2 32 = 4 294 967 296 символов. Однако максимальное количество юникод-символов на сегодня - 2 20 + 2 16 = 1 114 112.

UCS-2 (англ. Universal Character Set) - 1 символ = 2 байта, всего можно закодировать 16 февраля = 65 536 символов.

Стандарты кодировок:

UTF-32 (англ. Unicode Transformation Format - формат преобразования Юникода) - один из способов кодирования символов с Unicode в виде 32-битовых последовательностей. 1 символ = 32-бита.

UTF-16 - один из способов кодирования символов с Unicode в виде 16-битных последовательностей. Символы с кодами меньше 0x10000 (216) представляются как есть (одна 16-битная последовательность), а символы с кодами 0x10000-0x10FFFE - в виде двух 16-битовых последовательностей (так называемая "суррогатная" пара), первая из которых лежит в диапазоне 0xD800 -0xDBFF, а вторая - 0xDC00-0xDFFF. Легко видеть, что существует 2 10 * 2 10 = 2 20 таких комбинаций. А общее количество возможных символов 2 20 + 2 16 = 1 114 112. Следует отметить, что по стандарту никакие символы не могут иметь кодов собственно из диапазона 0xD800-0xDFFF, так что расшифровка кодирования всегда однозначна. Впрочем, в подавляющем большинстве случаев текст в UTF-16 просто последовательностью символов с UCS-2, поскольку символы Unicode после кода 0x10000 используются крайне редко.

UTF-16LE и UTF-16BE В потоке данных UTF-16 старший байт может записываться или перед младшим (UTF-16 Big Endian или UTF-16BE), или после младшего (UTF-16 Little Endian или UTF-16LE). Иногда кодирования Юникода Big Endian (UTF-16BE) называют Юникод с обратным порядком байтов. Аналогично существует два варианта 32-битного кодирования: UTF-32LE и UTF-32BE.

UTF-8 - распространенное сегодня кодирования, реализующего представление Юникода, совместимое с 8-битным кодированием текста. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображается последовательностями длиной от 2 до 6 байтов (реально только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а другие - 10xxxxxx.

Проще говоря, в формате UTF-8 символы латинского алфавита, знаки препинания и управляющие символы ASCII, записываются кодами ASCII-кодами, а остальные символов кодируется с помощью октетов (последовательности длиной 8 бит) со старшим битом 1. В результате, даже если программа не распознает Юникод, то латинские буквы, арабские цифры и знаки изображаться правильно.

Символы UTF-8 получают из Unicode следующим образом:

Unicode UTF-8

0x00000000 - 0x0000007F: 0xxxxxxx

0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx


Также теоретически возможны, но не включены в стандарты:

Unicode UTF-8

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx



2. Маркер порядка байтов

Для определения формата представления Юникода в текстовом файле используется прием, по которому в начале текста записывается символ U + FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов ( англ. Byte Order Mark , BOM). Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U + FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и непригодное понятие порядка байтов. Файлы, которые придерживаются этого правила, начинаются с таких байтов:

  • UTF-8: EF BB BF
  • UTF-16BE: FE FF
  • UTF-16LE: FF FE
  • UTF-32BE: 00 00 FE FF
  • UTF-32LE: FF FE 00 00

3. Кодовый пространство

Хотя формы записи UTF-8 и UTF-32 (8 и 32 десятичные числа, указывающие количество двоичных разрядов) позволяют кодировать до 2 31 (2 147 483 648) кодовых позиций, было принято решение использовать только 2 20 +2 16 (1 114 112) для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно - сегодня (в версии Unicode 5.0) используется немногим более 99 000 кодовых позиций.

4. Кодирование и типы текстовых данных языка С / С + +

В языке С / С + + исторически сложилась такая ситуация. Для работы с "обычными" текстовыми данными существует тип char. Для работы с, так называемым, "широким" текстом существует тип wchar_t. Особенности использования этих типов данных зависят от системы. А собственно особенностями являются кодировки текста в типах данных и размер одного символа. Для сравнения возьмем две системы:

Linux

1. char ("обычный" текст) Кодирование - UTF-8 Размер 1 символа - 1, 2, 3 или 4 байта sizeof (char) = 1

2. wchar_t ("широкий" текст) Кодирование - UTF-32 Размер 1 символа - 4 байта sizeof (wchar_t) = 4

Windows

1. char ("обычный" текст) Кодирование - кодовые страницы Размер 1 символа - 1 байт sizeof (char) = 1

2. wchar_t ("широкий" текст) Кодирование - UTF-16 Размер 1 символа - 2 или 4 байта sizeof (wchar_t) = 2


5. Выводы

Характерная особенность набора символов (UCS) - символы всегда фиксированной длины: UCS-2 - 1 символ = 2 байта (только одна плоскость с 17-ти) UCS-4 - 1 символ = 4 байта (65 ТСЧ. Плоскостей не использованы)

Характерная особенность кодирования (UTF) - символы не всегда фиксированной длины: UTF-32 - единственное кодирования с фиксированной длиной символов, 1 символ = 32 бита = 4 байта, поэтому можно сказать, что код символа в UCS-4 равен кода символа в UTF- 32. UTF-16 - коды символов <216 однозначно соответствуют кодам символов из набора UCS-2. Коды остальных символов (символы с кодом> = 216) однозначны только для UTF-16. UTF-8 - коды символов <128 однозначно соответствуют кодам символов верхней части ASCII таблицы. Коды остальных символов (символы с кодом> = 128) однозначны только для UTF-8.

Утверждение "1 байт = 1 символ" является устаревшим и в подавляющем большинстве практических случаев ошибочно. Длина символа не является фиксированной (исключение составляет кодировки UTF-32 и ASCII таблица). Юникод в программах - хорошая платформа для поддержки многоязычности.


код для вставки
Данный текст может содержать ошибки.

скачать

© Надо Знать
написать нам