
Многие из используемых сегодня систем письма насчитывают тысячи лет, в то время как цифровой текст все еще относительно нов. На заре развития компьютерных технологий цифровое представление текстов было ориентировано в основном на английский язык. Но сегодня большая часть глобального человеческого взаимодействия происходит в Интернете. Люди обмениваются информацией, преодолевая языковые и национальные границы. Это изменение потребовало разработки стандартизированной структуры для обмена текстами на различных алфавитах и системах письма. В то же время технологический прогресс открыл новые возможности для отображения символов.
Хорошим примером являются эмодзи на вашем смартфоне. Эти забавные значки можно вводить с помощью специальной клавиатуры и использовать так же, как буквы, почти как если бы они были естественной частью алфавита. Но как это работает? В основе лежит стандарт Unicode.
- Что такое Юникод?
- Техническая основа для кодирования символов
- Терминология для кодирования символов
- Обзор распространенных кодировок символов
- Структура стандарта Юникод
- Системы письма в стандарте Юникод
- Символы и знаки препинания как символы Юникода
- Для чего используется Юникод?
- Операционные системы
- Веб-сайты
- Языки программирования
- Базы данных
- Шрифты
- Как реализован Юникод?
- Специальные экранные клавиатуры
- Таблицы символов Юникода
- Числовая привязка символов
- Именованные идентификаторы символов
- Языки программирования
- Программная библиотека ICU
- Мета-атрибут Charset в HTML-главах
- Шрифты Twitter
Что такое Юникод?
Unicode означает универсальное кодирование символов. Это стандарт двоичного кодирования букв, цифр и других символов, позволяющий сохранять и обрабатывать тексты в цифровых системах.
Особенностью Unicode (и новаторством на момент его появления) является то, что он не связан с форматами и кодировками какого-либо одного человеческого языка. Он был создан как единый стандарт для представления всех человеческих языков и систем письма.
С момента выпуска Unicode 1.0 в 1991 году стандарт успешно выполняет свои функции. Он используется в браузерах и операционных системах как единый формат. Версия 13.0, выпущенная в 2020 году Консорциумом Юникод, может похвастаться репертуаром из 143 859 символов.
Консорциум Unicode, некоммерческая организация, базирующаяся в Калифорнии, отвечает за дальнейшее развитие стандарта. Членами консорциума являются такие ведущие технологические компании, как Adobe, Apple, Facebook, Google, IBM, Microsoft, Netflix и SAP. Набор символов Unicode полностью совпадает с универсальным набором кодированных символов (UCS), определенным международным стандартом ISO/IEC 10646.
Техническая основа для кодирования символов
Текст и письмо присутствуют в современной жизни повсюду. Чтение и письмо — это одно из первых, чему нас учат в школе. Поэтому неудивительно, что многие люди воспринимают наличие цифрового текста как нечто само собой разумеющееся. Но как именно работает техническое представление письма? Давайте совершим путешествие в мир цифрового кодирования символов.
Прежде чем двигаться дальше, важно понять, что на более глубоком уровне вся информация в цифровых системах состоит из последовательностей нулей и единиц. Это называется двоичным представлением. Двоичный код можно сравнить с алфавитом, в котором есть только две «буквы» (ноль и единица). Каждое место в серии нулей и единиц называется битом.
Основная идея заключается в том, чтобы представить символы различных алфавитов в виде последовательностей нулей и единиц. Именно так кодируются буквы и цифры, а также любые другие различимые состояния. Все эти символы называются «символами». Чем длиннее последовательность нулей и единиц, тем больше символов может быть представлено. Количество символов, которые могут быть представлены, удваивается с каждым битом, который вы добавляете к последовательности.
Конкретный пример: Если у нас есть двоичные «слова» длиной в два бита, мы можем закодировать четыре числа.
Двухбитовое слово |
Число |
00 |
0 |
01 |
1 |
10 |
2 |
11 |
3 |
Если мы вставим еще один бит в начало последовательности, то количество возможных битовых слов удвоится. Новые «слова» будут состоять из последовательностей битов, приведенных выше, перед которыми будет стоять либо ноль, либо единица. Итак, теперь мы можем закодировать восемь чисел:
Трехбитовое слово |
Число |
000 |
0 |
001 |
1 |
010 |
2 |
011 |
3 |
100 |
4 |
101 |
5 |
110 |
6 |
111 |
7 |
Восьмибитное слово называется октетом или байтом.
Для простоты мы продемонстрировали здесь кодирование чисел. Но тот же принцип действует и при кодировании букв или любых других символов или состояний. Смотрите следующий упрощенный пример двоичного кодирования букв:
Трехразрядное слово |
Буква |
000 |
A |
001 |
B |
010 |
C |
Имейте в виду, что наше объяснение до этого момента не имело никакого отношения к системам письма. Мы просто говорим о внутренней модели, которая используется для цифрового представления символов. Графическое представление символа называется глифом. Для одного и того же символа существуют различные глифы, в зависимости от используемого шрифта. Даже в пределах одного шрифта может быть несколько вариантов глифа — например, для жирного и курсивного начертания. Следующая таблица иллюстрирует это кодирование:
Двоичное представление | Десятичное число | Кодированный символ | Глиф |
---|---|---|---|
1000001 | 65 | Заглавная буква «A» в латинском алфавите | A |
1100001 | 97 | Строчная буква «a» в латинском алфавите | a |
0110000 | 48 | Арабская цифра «0» | |
0111001 | 57 | Арабская цифра «9» | 9 |
11000100 | 196 | Заглавная буква «Ä» | Ä |
11000001 | 193 | Заглавная «Á» | Á |
Терминология для кодирования символов
Цифровое кодирование символов затрагивает несколько специфических понятий. Чтобы дать точное определение Unicode, мы обобщили здесь некоторые из наиболее важных терминов:
Термин | Значение |
---|---|
Набор символов | Набор возможных символов, например, цифры «0-9», буквы «a-z» и т.д. |
Кодовая точка | Номер, присвоенный определенному символу в кодовой области. |
Кодированный набор символов | Присвоение каждому символу ровно одной кодовой точки. |
Кодирование символов | Процесс преобразования каждого символа в техническую структуру, такую как двоичное представление. |
Обзор распространенных кодировок символов
До появления Юникода существовало большое разнообразие специфических кодировок. Нормой было создание отдельной кодировки для каждого языка или языковой семьи. Это часто приводило к ошибкам отображения или несоответствию данных. Чтобы предотвратить это, кодировки символов часто моделировались как совместимые по нисходящей надмножества уже существующего стандарта. Таким образом, современный стандарт Unicode основан на более ранней кодировке ISO Latin-1, которая, в свою очередь, основана на кодировке ASCII.
Кодировка символа | Биты на символ | Возможные символы | Набор символов |
---|---|---|---|
ASCII | 7 | 128 | Буквы, цифры и специальные символы американской клавиатуры; управляющие символы для телепринтеров |
ISO Latin-1 (ISO 8859-1) | 8 | 256 | 128 символов из ASCII, а также 128 специальных символов из европейских языков. |
Универсальный набор кодированных символов 2 (UCS-2) | 16 | 65,536 | Символы из «Базовой многоязычной плоскости» (BMP); 256 символов из ISO Latin-1. |
Универсальный набор кодированных символов 4 (UCS-4) | 32 | 1,114,111 | Символы из BMP и последующие символы; 143 859 символов в Юникоде версии 13.0; первые 256 символов из ISO Latin-1 |
Формат преобразования UCS 8 бит (UTF-8) | 8/16/24/32 | 1,114,111 | Символы из UCS-2 и UCS-4; первые 256 символов из ISO Latin-1. |
Структура стандарта Юникод
Стандарт Unicode определяет символы и соответствующие кодовые точки для букв, слоговых знаков, идеограмм, знаков препинания, специальных символов и цифр. Он поддерживает не только латинский алфавит, но и греческий, кириллический, арабский, иврит и тайский алфавиты, а также японскую (катакана, хирагана), китайскую и корейскую (хангыль) системы письма. Кроме того, имеются математические, коммерческие и технические знаки, а также исторические контрольные знаки для телепринтеров.
Символы сведены в серию таблиц символов. Мы представим вам обзор наиболее распространенных таблиц символов.
Системы письма в стандарте Юникод
Таблица символов | Выбор содержащихся алфавитов |
---|---|
Европейские системы письма | Армянская, грузинская, греческая, латинская |
Африканские системы письма | Эфиопская, египетские иероглифы, коптская |
Системы письменности Ближнего Востока | арабская, иврит, сирийская |
Системы письма Центральной Азии | Монгольская, тибетская, древнетюркская |
Системы письма Южной Азии | Брахми, тамильский, ведический санскрит |
Системы письма Юго-Восточной Азии | Кхмерский, рохинья, тайский |
Письменные системы Индонезии и Океании | балийский, бугинезийский, яванский |
Системы письма Восточной Азии | CJK (китайский, японский, корейский), хангыль (корейский), хирагана (японский) |
Американские системы письма | Чероки, канадское слоговое письмо, осаге |
Символы и знаки препинания как символы Юникода
Таблица символов | Выбор содержащихся символов |
---|---|
Системы обозначений | Шаблоны Брайля, музыкальные ноты, развертывание стенографии |
Знаки препинания | Знаки препинания из английского, других европейских языков и CJK |
Буквенно-цифровые символы | Математические буквы, закрытые буквы и цифры |
Технологические символы | Символы из языка программирования APL, символы для оптического распознавания символов |
Цифры и числительные | Цифры майя, османские цифры сияк, цифры из шумерской клинописи |
Математические символы | Стрелки, математические операции, геометрические формы |
Эмодзи и пиктограммы | Эмотиконы, дингбаты, другие пиктограммы |
Другие символы | Алхимические символы, валютные символы, символы шахмат, домино и маджонга. |
Для чего используется Юникод?
Стандарт Unicode служит универсальной основой для обработки, сохранения и обмена текстом на любом языке. Большинство современных программных компонентов, работающих с текстом, таких как библиотеки, протоколы и базы данных, основаны на Unicode. В этом разделе мы проиллюстрируем широкий спектр случаев использования Unicode.
Операционные системы
Юникод — это внутренний стандарт для представления текста в большинстве операционных систем. Некоторые операционные системы, такие как macOS от Apple, позволяют использовать символы Unicode в именах файлов.
Веб-сайты
Вариант Юникода UTF-8 стал стандартом для кодирования HTML-документов. В 2016 году более 80 процентов самых посещаемых сайтов в мире использовали UTF-8 для сохранения и представления своих HTML-документов. Punycode теперь установлен для использования доменных имен с буквами Unicode не из ASCII.
Языки программирования
Многие современные языки программирования используют Юникод в качестве основы для обработки текста. Более новой разработкой является возможность использования символов Юникода для именования переменных и функций. Это возможно, например, в ECMAScript/JavaScript. Следующий пример показывает, как символы Unicode используются в коде:
let ✔︎ = true;
let ✘ = false;
if (bool_var === ✔︎) {
// …
}
Базы данных
Популярная и широко используемая база данных MySQL поддерживает полный набор символов Unicode с кодировкой «utf8mb4». Когда же используется кодировка «utf8», буквы Unicode, кодовые точки которых занимают более 3 байт, теряются.
Шрифты
Шрифты содержат глифы для графического представления текста. Из-за большого количества символов Юникода не существует единого шрифта, который содержал бы все символы. На самом деле, существует всего несколько шрифтов, которые даже полностью покрывают основную многоязычную плоскость. Вот несколько примеров:
Шрифт Юникода | Glyphs | Лицензия |
---|---|---|
Noto | Приблизительно 65 000 | Лицензия открытого шрифта |
Sun-ExtA/B | Приблизительно 50,000 | Freeware |
Unifont | Приблизительно 63 000 | GNU GPL |
Code2000 | Приблизительно 63 000 | Shareware |
Как реализован Юникод?
Во многих случаях люди используют Юникод, даже не подозревая об этом. Цифровой текст обычно отображается в Юникоде и может копироваться, вставляться и редактироваться пользователями. Иногда пользователю необходимо вставить в текст определенную букву Юникода. Для этого существуют различные способы, о которых мы расскажем ниже.
Специальные экранные клавиатуры
Специальные экранные клавиатуры (также называемые виртуальными клавиатурами или мягкими клавиатурами), вероятно, являются самым распространенным способом вставки символов Юникода в текст. На клавиатурах мобильных устройств можно легко переключаться между различными языками и алфавитами. В каждом случае раскладка клавиатуры будет меняться, но все символы будут из репертуара Юникода. Символы можно смешивать и комбинировать.
Хорошим примером для этого являются эмодзи: Эмодзи — это совершенно обычные символы Unicode, такие же, как цифры и буквы. Отображение эмодзи не зависит от их внутреннего моделирования. Каждая операционная система отображает эмодзи немного по-разному.
Экранные клавиатуры также используются на настольных компьютерах. В Windows, macOS и многих дистрибутивах Linux можно открыть виртуальные клавиатуры, которые отображают различные символы Юникода в зависимости от выбранного языка. Поскольку количество клавиш ограничено, не все буквы Юникода будут отображаться. Скорее, вы увидите набор наиболее распространенных символов в зависимости от языка.
Таблицы символов Юникода
Помимо экранных клавиатур, таблицы символов Юникода, вероятно, являются одним из самых удобных способов доступа к буквам Юникода. Краткий обзор: Набор кодированных символов — это набор всех символов и соответствующих им уникальных кодовых точек. Такую структуру можно легко отобразить в виде таблицы, которые в случае Unicode называются кодовыми таблицами. Эти таблицы используются для копирования определенных символов, которые затем могут быть вставлены в другое место. Конечный пользователь также может обратиться к ним, чтобы узнать кодовую точку для использования в качестве числового справочника символов — подробнее об этом в следующем разделе.
Многие настольные операционные системы также имеют таблицу символов Юникода, в которой представлен обзор всех доступных символов Юникода, включая кодовую точку, описание и глифы. Символ можно скопировать и вставить одним щелчком мыши. Вы также можете создать таблицу символов самостоятельно с помощью всего нескольких строк кода. Позже в этой статье вы найдете пример такого создания с помощью Python.
Числовая привязка символов
Присвоение символам кодовых точек является важной частью стандарта Unicode. Если вы знаете кодовую точку для символа, вы сможете использовать его в различных контекстах. В Windows символы Юникода вставляются с помощью специальной комбинации клавиш на обычной жесткой клавиатуре. Обратите внимание, что номер кодовой точки обычно нужно вводить в шестнадцатеричной системе счисления.
Программистам обычно требуется числовая ссылка на символ. Шестнадцатеричная нотация кодовой точки позволяет отобразить символ Unicode в символах из набора символов ASCII. Мы покажем вам, как этот процесс работает в HTML; в целом этот процесс одинаков для Python, C++ и других языков.
Общая формула для вставки символа с использованием его числовой ссылки включает саму ссылку, а также открывающий и закрывающий член. В документах HTML числовая ссылка открывается символом «&#x» и закрывается символом «;». Между этими двумя терминами следует вставить шестнадцатеричную кодовую точку из двух-четырех цифр, в результате чего получается схема «&#xNNNNN;».
Например, чтобы вставить символ авторского права «©» в HTML-документ, необходимо выполнить следующие действия:
- Найдите символ в таблице Юникода.
- Проверьте кодовую точку для этого символа. В данном примере кодовой точкой является «U+00A9» в шестнадцатеричной системе счисления.
- Создайте ссылку на символ и вставьте ее в исходный текст HTML или в документ разметки.
В нашем случае мы вставим «©», что даст нам визуализированный символ «©».
Существует также менее распространенный метод, который использует кодовые точки в десятичной, а не шестнадцатеричной нотации. В этом случае числовая ссылка будет начинаться с «&#» (без «x») и заканчиваться, как и раньше, «;». Кодовая точка в десятичной системе счисления находится между ними. Для символа авторского права результат будет выглядеть так: «©».
Используйте Инспектор символов Юникода, чтобы быстро найти различные коды для символа.
Именованные идентификаторы символов
Поскольку запись символов Юникода в виде числовых ссылок не является интуитивно понятной для человека, существует и другой метод — именованные символьные сущности. Они определяются для часто используемых символов и присваивают каждому символу короткое, запоминающееся имя. Именованная символьная сущность начинается с амперсанда «&» и заканчивается точкой с запятой «;». Имя помещается между этими двумя символами без пробелов. Так, например, чтобы сделать знак копирайта «©» в HTML, можно просто написать «©».
Полный список именованных символов можно найти в стандарте HTML.
Языки программирования
Большинство языков программирования содержат фундаментальные функции, которые можно использовать для преобразования символов и кодовых точек. Эти функции часто называют «ord(Character)» и «chr(Code point)». Функции работают вместе следующим образом:
‘chr(ord(Character)) == Character’.
Обратите внимание, что всегда можно определить, какая кодовая точка соответствует символу. Другой способ будет работать только для чисел, которые определены как кодовые точки в кодовом наборе символов. В следующем примере мы покажем, как эти функции обычно работают в Python.
# Ascertain decimal code point of a character
ord('A') # `65`
# Ascertain hexadecimal code point of a character
hex(ord('A')) # `0x41`
# Ascertain which character corresponds to a code point
chr(65) # `'A'`
chr(0x41) # `'A'`
chr(0x110001) # Error, since it’s a code point > `0x110000`
С помощью этих функций можно легко создать таблицу символов для кодовых точек из набора символов Unicode. Просто перебирайте кодовые точки и выводите соответствующий символ. Это можно сделать с помощью всего нескольких строк кода в Python:
# Start the range at 32, since control characters will be given as output for smaller values
# Output the ASCII character set
for code_point in range(32, 128):
# Output ISO Latin-1
for code_point in range(32, 256):
# Output code point in decimal and hexadecimal notation including the corresponding character
print(code_point, hex(code_point), chr(code_point))
Программная библиотека ICU
Международные компоненты для Unicode (ICU) собраны в библиотеке программ, доступной Консорциумом Unicode. Библиотека опубликована под лицензией с открытым исходным кодом и может использоваться на различных операционных системах. Программа облегчает программную интернационализацию (часто сокращенно называемую «i18n»). Его применение включает в себя:
- Обработка текстов Unicode
- Поддержка регулярных выражений в Юникоде
- Разбор и форматирование данных календаря, информации о дате и времени, чисел, валют и сообщений.
Существует две версии библиотеки ICU:
- «icu4c» написана на C/C++ и предоставляет API для этих языков.
- «icu4j» написана на Java и предоставляет API для этого языка.
Реализация компонентов обеспечивает согласованные результаты независимо от используемой платформы.
Мета-атрибут Charset в HTML-главах
В большинстве HTML-документов используется кодировка символов UTF-8. Чтобы гарантировать, что страница будет отображаться без ошибок, необходимо поместить мета-атрибут «charset» в шапку HTML-документа. Это указывает браузеру, что запрашиваемый документ должен интерпретироваться как UTF-8. См. следующий пример:
<head>
<meta charset="utf-8">
<!-- Additional head elements -->
</head>
Шрифты Twitter
Популярная платформа социальных сетей Twitter не позволяет форматировать текст в твитах, профилях и именах пользователей, что ограничивает творческие возможности пользователей. Находчивые разработчики нашли способ обойти эту проблему: Twitter использует Unicode, а это значит, что можно использовать специальные символы, чтобы составить текст, который будет выглядеть форматированным. Особенно полезны символы, похожие на буквы латинского алфавита. Самый простой способ сделать это — использовать генератор шрифтов Twitter.