Юникод

Юникод — это глобальный стандарт кодировки символов. Система использует Юникод исключительно для обработки символов и строк. Подробное описание всех аспектов Юникода см. в статье Стандарт Юникода.

По сравнению со старыми механизмами обработки символьных и строковых данных, Юникод упрощает локализацию программного обеспечения и улучшает многоязычную обработку текста. Используя Юникод для представления символьных и строковых данных в приложениях, вы можете включить универсальные возможности обмена данными для глобального маркетинга, используя один двоичный файл для каждого возможного кода символов. Юникод выполняет следующие действия:

  • Позволяет сосуществовать в одном документе любой комбинации символов, полученных из любого сочетания скриптов и языков.
  • Определяет семантику для каждого символа.
  • Стандартизирует поведение скрипта.
  • Предоставляет стандартный алгоритм для двунаправленного текста.
  • Определяет перекрестное сопоставление с другими стандартами.
  • Определяет несколько кодировок одного набора символов: UTF-7, UTF-8, UTF-16 и UTF-32. Преобразование данных между этими кодировками выполняется без потерь.

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

Функции с поддержкой Юникода описаны в разделе Соглашения о прототипах функций. Эти функции используют кодировку UTF-16 (расширенные символы), которая является наиболее распространенной кодировкой Юникода и используется для собственной кодировки Юникода в операционных системах Windows. Каждое значение кода имеет ширину 16 бит, в отличие от более старого подхода кодовой страницы к символьным и строковым данным, в котором используются 8-разрядные значения кода. Использование 16 бит позволяет напрямую кодирование 65 536 символов. На самом деле, вселенная символов, используемых для транскрибирования человеческих языков, даже больше, чем это, а кодовые точки UTF-16 в диапазоне от U+D800 до U+DFFF используются для формирования суррогатных пар, которые представляют собой 32-разрядные кодировки дополнительных символов. Дополнительные сведения см. в разделе Суррогаты и дополнительные символы .

Набор символов Юникода включает в себя множество комбинатных символов, таких как U+0308 ("ирование"), объединяющий dieresis или umlaut. Юникод часто может представлять один и тот же глиф в форме ''composed'' или ''decomposed'' ( например, составная форма "Ä" — это единая кодовая точка Юникода "Ä" (U+00C4), а ее разложенная форма — "A" + "онос" (U+0041 U+0308). Юникод не определяет составную форму для каждого глифа. Например, вьетнамская строчная буква "o" с циркумфлексом и тильдой ("ỗ") представлена U+006f U+0302 U+0303 (o + Circumflex + Tilde). Дополнительные сведения об объединении символов и связанных с ними проблемах см. в статье Использование нормализации Юникода для представления строк.

Для обеспечения совместимости с 8-разрядными и 7-разрядными средами Юникод также можно закодировать как UTF-8 и UTF-7 соответственно. Хотя функции с поддержкой Юникода в Windows используют UTF-16, можно также работать с данными, закодированными в UTF-8 или UTF-7, которые поддерживаются в Windows в виде кодовых страниц многобайтовых символов.

Новые приложения Windows должны использовать UTF-16 в качестве внутреннего представления данных. Windows также обеспечивает обширную поддержку кодовой страницы, и в одном приложении возможно смешанное использование. Даже новые приложения на основе Юникода иногда должны работать с кодовыми страницами. Причины этого рассматриваются в разделе Кодовая страница.

Приложение может использовать функции MultiByteToWideChar и WideCharToMultiByte для преобразования между строками на основе кодовых страниц и строк Юникода. Хотя их имена относятся к "MultiByte", эти функции одинаково хорошо работают с однобайтовой кодировкой (SBCS), двухбайтовой кодировкой (DBCS) и многобайтовой кодировкой (MBCS).

Как правило, приложение Windows должно использовать UTF-16 внутренне, преобразуя только как часть "тонкого слоя" по интерфейсу, который должен использовать другой формат. Этот метод защищает от потери и повреждения данных. Каждая кодовая страница поддерживает разные символы, но ни один из них не поддерживает полный спектр символов, предоставляемых Юникодом. Большинство кодовых страниц поддерживают разные подмножества, закодированные по-разному. Кодовые страницы для UTF-8 и UTF-7 являются исключением, так как они поддерживают полный набор символов Юникода, и преобразование между этими кодировками и UTF-16 без потерь.

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

Данные, преобразованные из Юникода в кодовую страницу, могут быть потеряны, так как данная кодовая страница может не представлять все символы, используемые в данных Юникода. Поэтому обратите внимание, что WideCharToMultiByte может потерять некоторые данные, если целевая кодовая страница не может представить все символы в строке Юникода.

При модернизации устаревших приложений на основе кодовых страниц для использования Юникода можно использовать универсальные функции и макрос TEXT для поддержки единого набора источников для компиляции двух версий приложения. Одна версия поддерживает Юникод, а другая — с кодовыми страницами Windows. С помощью этого механизма можно преобразовать даже очень большие приложения из кодовых страниц Windows в Юникод, сохраняя при этом источники приложений, которые можно компилировать, создавать и тестировать на всех этапах преобразования. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

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

Кодировки

Сортировка

Суррогаты и дополнительные символы

Использование нормализации Юникода для представления строк