русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Юникод

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

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

Юникод снимает старое ограничение на кодировку только одним байтом. Вместо того, используется 17 пространств, каждое из которых определяет 65,536 кодов и позволяет описать максимум 1114112 (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 ).

 

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

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

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

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

UCS-2 (англ. Universal Character Set) - 1 символ = 2 байта, всего можно закодировать 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 = 1114112. Следует отметить, что по стандарту никакие символы не могут иметь кодов собственно из диапазона 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


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

Для определения формата представления Юникода в текстовом файле используется прием, по которому в начале текста записывается символ 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

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

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

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

В языке С / С + + исторически сложилась такая ситуация. Для работы с «обычными» текстовыми данными существует тип 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

 

Выводы

Характерная особенность набора символов (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 таблица). Юникод в программах - хорошая платформа для поддержки многоязычности.

Просмотров: 19371


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.