Кодированный символ
Кодирование символов
Кодирование — способ преобразования потока байтов в символы Юникода.
В кодировании используют идентификатор символа и наименование символа.
Кодовое пространство Юникода (Unicode codespace) — диапазон целых чисел в шестнадцатеричной системе счисления от 0 до 10FFFF16.
Кодовая точка (Code point) — любое значение в кодовом пространстве Юникода. Синоним: кодовая позиция (code position)
Кодированный символ (Encoded character) — отношение между абстрактным символом и кодовой точкой представленное минимальной комбинацией битов.
Кодированные символы Юникода не зависят от специфики ни естественного языка, ни языка программирования. В контексте Юникода:
- термин «символ» означает кодированный символ;
- термин «последовательность символов» означает последовательность кодированных символов.
Последовательность кодированных символов (Coded character sequence) — упорядоченная последовательность одной или нескольких кодовых точек.
В контексте языков программирования значение строкового типа данных состоит из последовательности кодированных символов. Неформально программисты называют строкой последовательность кодированных символов, а строкой байтов — последовательность байтов. В объектно-ориентированных языках строка — это сложный объект со связанными методами, и её значение может состоять или не состоять только из последовательности кодированных символов.
Технически последовательность может состоять из одного кодированного символа, но фактически последовательности гораздо длиннее.
Добавление или удаление кодовых точек изменяет интерпретацию всей последовательности. Например, изменение последовательности и состава букв в слове изменяет значение слова.
Вышедший из употребления символ (Deprecated character) — кодированный символ применение которого стандарт настоятельно не рекомендует.
Вышедшие из употребления символы сохранены в Юникоде для согласованности с ранее составленными текстами. К вышедшим из употребления символам относят символы со значительными архитектурными проблемами или символы, которые вызывают ошибки реализации.
В кодовых таблицах Юникода вышедшие из употребления символы указаны явно. В базе данных им присвоено свойство Deprecated=True.
Устаревшие символы не следует путать с историческими символами других письменностей. Например, для кириллицы к устаревшим можно отнести символы старославянскую письменность и глаголицу.
Устаревший символ (Obsolete characters) — символ прежних исторических письменностей.
Несимвол (Noncharacter) — использованная кодовая точка для которой никогда не будет назначен абстрактный символ.
Несимволы расположены в диапазоне U+nFFFE и U+nFFFF, где n — от 0 до 1016. Также к ним относят значения от U+FDD0 до U+FDEF.
Несимволы не предназначены для обмена сообщениями. Их применяют для внутренних целей.
Зарезервированная кодовая точка (Reserved code point) — любая кодовая точка Юникода, зарезервированная для будущего назначения.
Зарезервированную кодовую точку следует отличать от суррогатной и от несимвола. В зарезервированной кодовой точке не назначено ничего, кроме кода. Суррогатные кодовые точки и несимволы это назначенные кодовые точки.
Высокоуровневый протокол (Higher-level protocol) — любое соглашение об интерпретации символов Юникода.
Определение протокола выходит за рамки стандарта Юникода. Протокол не обязательно формально объявлять, он может входить в контекст.
Алгоритм Юникода (Unicode algorithm) — логическое описание процесса достижения заданного результата для символов Юникода.
Именованный алгоритм Юникода (Named Unicode algorithm) — алгоритм, указанный в стандарте Юникода.
Именованные алгоритмы в стандарте Юникода обозначаются заглавными буквами.
Приведём список именованных алгоритмов Юникода с указанием местоположения в спецификации. Подробности о применении алгоритма следует искать в указанной спецификации. В скобках приведён неофициальный перевод на русский язык.
Section 3.11 Canonical Ordering (канонический порядок)
Section 3.11 Canonical Composition (каноническая композиция)
Section 3.11 Normalization (нормализация)
Section 3.13 Default Case Conversion (преобразование регистра по умолчанию)
Section 3.13 Default Case Detection (определение регистра по умолчанию)
Section 3.13 Default Caseless Matching (безрегистровое сопоставление по умолчанию)
UAX #14 Line Breaking Algorithm (алгоритм переноса слов)
UAX #29 Character Segmentation (сегментация символов)
UAX #29 Word Segmentation (сегментация слов)
UAX #29 Sentence Segmentation (сегментация предложений)
UTS #6 Standard Compression Scheme for Unicode (SCSU) (стандартная схема сжатия)
UTS #10 Unicode Collation Algorithm (UCA) (алгоритм сортировки)Возможны следующие операции над кодированными символами:
- композиция, комбинирование одного символа из нескольких элементов (Пример, буква «Ё» — композиция точек над буковой Е);
- объединение нескольких элементов в один символ (в русском языке не применяют);
- словообразование, объединение символов в значащее слово.
Кодовые точки символов
Для компьютерной обработки абстрактные символы кодируют числами.
Кодовое пространство — диапазон целых чисел, используемых для кодирования абстрактных символов.
Кодовая точка — конкретное целое число в кодовом пространстве.
Кодированный символ — абстрактный символ с назначенной кодовой точкой кодового пространства.
В отдельных случаях абстрактный символ можно представить последовательностью двух и более кодированных символов.
При ссылке на кодовые точки Юникода используют их числовые значения, выраженные в шестнадцатеричной системе счисления. Для указания на Юникод вначале добавляют префикс «U+».
Классификация типов кодовых точек
Тип кодовой точки (Code point type) — класс кодовой точки, определённый стандартом Юникода.
Стандарт Юникод кроме набора символов и их идентификаторов содержит базу данных символов (Unicode Character Database). В базе данных описаны свойства символов. В том числе таблица «Общая категория» (General_Category) базы данных содержит список категорий символов.
Классификация типов кодовых точек, присвоенных абстрактным символам:
- Графические символы: буквы, метки, числа, пунктуация, символы, пробелы.
- Символы форматирования: разделители строк, абзацев, страниц.
- Символы управления: применение определяют протоколы и стандарты за пределами Юникода.
- Символы частного применения: зарезервированы для пользователя.
Символы управления и символы частного применения не применяют в рамках Юникода и гипертекста. Исключим их из дальнейшего рассмотрения.
Классификация графических символов Юникода: -L: Letter — Буквы - Ll: Lowercase Letter — Буквы в нижнем регистре - Lm: Modifier Letter — Модифицирующие буквы - Lo: Other Letter — Прочие буквы - Lt: Titlecase Letter — Заглавные буквы - Lu: Uppercase Letter — Буквы в верхнем регистре
- M: Mark — Метки
- Mc: Spacing Mark — Метки пробела
- Me: Enclosing Mark — Включающая метка
- Mn: Nonspacing Mark — Комбинируемые метки
- N: Number — Числа
- Nd: Decimal Number — Цифры чисел
- Nl: Letter Number — Буквы чисел
- No: Other Number — Другие числа
- P: Punctuation — Пунктуация
- Pc: Connector Punctuation — Соединители
- Pd: Dash Punctuation — Тире и дефисы
- Pe: Close Punctuation — Закрывающая пунктуация
- Pf: Final Punctuation — Закрывающие кавычки
- Pi: Initial Punctuation — Открывающие кавычки
- Po: Other Punctuation — Прочая пунктуация
- Ps: Open Punctuation — Открывающая пунктуация
- S: Symbol — Символы
- Sc: Currency Symbol — Символы валют
- Sk: Modifier Symbol — Модифицирующие символы
- Sm: Math Symbol — Математические символы
- So: Other Symbol — Прочие символы
- Z: Separator — Разделители
- Zs: Space Separator — Пробельные разделители
Классификация символов форматирования:
- C: Control — Символы управления
- Cf: Format — Символы форматирования
- Z: Separator — Разделители
- Zl: Line Separator — Разделители строк
- Zp: Paragraph Separator — Разделитель абзацев
Практика применения типов
Классификация типов абстрактных символов неудобная с практической точки зрения управления гипертекстом. Полезнее следующая интерпретация:
- Для языков программирования и русскоязычных текстов нехарактерно применение модифицирующих букв (Lm) и символов (Sk). Их можно не рассматривать.
- Парные символы применяют совместно. На практике желательно пару иметь не в двух разных таблицах, а расположенную рядом.
- В русскоязычных текстах нет острой необходимости в диакритических знаках. Практический интерес представляют лишь ударения, которые входят в категорию Mn.
Таким образом практичная классификация графических символов выглядит следующим образом: -L: Letter — Буквы - Ll: Lowercase Letter — Буквы в нижнем регистре - Lo: Other Letter — Прочие буквы - Lt: Titlecase Letter — Заглавные буквы - Lu: Uppercase Letter — Буквы в верхнем регистре
- Mn: Комбинируемые метки:
- N: Number — Числа
- Nd: Decimal Number — Цифры чисел
- Nl: Letter Number — Буквы чисел
- No: Other Number — Другие числа
- P: Punctuation — Пунктуация
- Pc: Connector Punctuation — Соединители
- Pd: Dash Punctuation — Тире и дефисы
- Парная пунктуация (Ps, Pe)
- Парные кавычки (Pi, Pf)
- Po: Other Punctuation — Прочая пунктуация
- S: Symbol — Символы
- Sc: Currency Symbol — Символы валют
- Sm: Math Symbol — Математические символы
- So: Other Symbol — Прочие символы
- Z: Separator — Разделители
- Zs: Space Separator — Пробельные разделители
Форма кодирования
Скалярное значение Юникода (Unicode scalar value) — любая кодовая точка Юникода, за исключением кодовых точек с суррогатным значением.
Набор скалярных значений Юникода расположен в диапазоне от 0 до D7FF16 и от E00016 до 10FFFF16 включительно.
Форма кодирования Юникода (Unicode encoding form) — сопоставление каждого скалярного значения Юникода с уникальной последовательностью кодовых элементов. Исторически формы кодирования Юникода иногда называют форматами преобразования Юникода.
Форма кодировки символа (Character encoding form, CEF) — сопоставление кодовых точек кодовым элементам (символам).
Форма кодировки позволяет облегчить хранение данных в компьютере. Например, применение 16-битной кодировки позволяет хранить до 65536 кодовых точек.
Строка Юникода (Unicode string) — последовательность кодовых элементов, содержащая кодовые элементы определённой кодировки Юникода.
Стандарт Юникода (Unicode) определяет три формата кодировки символов: UTF-32, UTF-16 и UTF-8. Аббревиатурное сокращение UTF в названии означает «формат преобразования Юникода» (Unicode Transformation Format). Цифры в кодировке означают количество бит, использованных для кодирования символа.
В самом простом виде строки Юникода реализованы просто как массивы соответствующего целочисленного типа данных, состоящие из последовательности кодовых элементов, расположенных один за другим.
8-битная строка Юникода (Unicode 8-bit string) — строка, которая содержит только кодовые элементы UTF-8.
16-битная строка Юникода (Unicode 16-bit string) — строка, которая содержит только кодовые элементы UTF-16.
32-битная строка Юникода (Unicode 32-bit string) — строка, которая содержит только кодовые элементы UTF-32.
Неправильно сформированная последовательность кодовых элементов Юникода (Ill-formed) — некорректная, несоответствующая спецификации Юникода последовательность кодовых элементов.
Правильно сформированная последовательность кодовых элементов Юникода (Well-formed) — корректная, соответствующая спецификации Юникода последовательность кодовых элементов.
Схема кодирования Юникода
Схема кодировки символов состоит из заданной формы кодировки символов и спецификации того, как кодовые единицы сериализуются в байты.
Схема кодирования Юникода (Unicode encoding scheme) — спецификация байтовой сериализации формы кодирования Юникода.
Исторически сложилось так, что схемы кодирования Unicode называют форматами преобразования Юникода (UCS, и Unicode transformation formats, UTF).
Схема кодирования UTF-8 (UTF-8 encoding scheme) — схема кодирования Юникода, которая сериализует последовательность кодовых элементов UTF-8 в том же порядке, что и сама последовательность кодовых элементов.
Кодировка UTF-8
Фактическим стандартом в Вебе стала кодировка UTF-8. Именно эту кодировку следует указывать в метаданных вебстраницы.
Кодирование UTF-8 определяет следующие правила:
- Недопустимы символы, выходящие за пределы таблицы символов Юникода, т.е. более U+10FFFF.
- Недопустимо присутствие символов суррогатных пар (U+D800 –& U+DFFF).
- Символ следует кодировать наименьшим количеством байт. Другое избыточное кодирование — недопустимо.
Правильно сформированная последовательность кодовых элементов UTF-8 (Well-formed UTF-8 code unit sequence) — корректная, соответствующая спецификации Юникода последовательность кодовых элементов UTF-8.
Форма кодировки UTF-8 (UTF-8 encoding form) — форма кодировки Юникода, которая присваивает каждому скалярному значению Юникода беззнаковую последовательность байтов длиной от одного до четырёх байтов.
Перекодировка
Для поддержки сред, использующих несколько кодировок, — а Всемирная паутина именно такая среда, — существует программное обеспечение для перевода текста между кодировками. Практически все современные браузеры поддерживают автоматическое определение кодировки символов на открытой пользователем вебстранице.