Юникод
Юнико́д (англ. Unicode), стандарт кодирования символов, предназначенный для непротиворечивого кодирования, представления и обработки текстов во множестве письменных систем.
Общие сведения
Название стандарта отражает три главные характеристики, на достижение которых этот стандарт направлен (About the Unicode Consortium):
универсальный (англ. universal) – пригодный для использования с различными мировыми языками;
единообразный (англ. uniform) – использует коды символов с фиксированной шириной для эффективного доступа;
уникальный (англ. unique) – всегда имеется только одна интерпретация последовательности битов, кодирующих символы.
Юникод включает в себя:
универсальный набор символов, или UCS (от англ. Universal Character Set), – набор всех включённых в стандарт символов. Каждому символу присваивается собственный код, который можно представить в виде неотрицательного целого числа, записанного в шестнадцатеричной системе счисления. Например, кириллическая буква «я» имеет код U+044F. Коды Юникода разделены на несколько областей по 216 (65 536) символов, называемых плоскостями (англ. planes), обладающими разными названиями и включающими символы с разным назначением. Например, базовая многоязыковая плоскость (англ. Basic Multilingual Plane, BMP), являющаяся также нулевой плоскостью, охватывает диапазон от U+0000 до U+FFFF и содержит символы наиболее употребительных письменностей. Считается, что в версии Юникода 15.0 содержится 149 186 символов (Basic Questions), однако данное число не учитывает некоторые символы (например, управляющие символы), которые подсчитаны в более общей статистике (Unicode® Statistics);
семейство кодировок UTF (от англ. Unicode Transformation Format), отличающихся количеством байтов, необходимых для записи одного символа: UTF-8, UTF-16 и UTF-32. Кодировки UTF представляют собой алгоритмическое отображение каждой кодовой позиции (за исключением суррогатных кодов от U+D800 до U+DFFF) в уникальную байтовую последовательность (UTF-8, UTF-16, UTF-32 & BOM). Для четырёхбайтовых кодировок имеются разновидности, отличающиеся порядком записи байтов (англ. little-endian или big-endian): UTF-16LE и UTF-16BE, UTF-32LE и UTF-32BE.
История развития
С развитием компьютеров стали появляться различные способы кодировки символов. Использование только 7 битов для представления символов, как, например, в стандартной кодировке ASCII (1963), не позволяло обеспечить поддержку различных письменностей в одной таблице кодировки из-за её ограниченной вместимости.
При расширении до 8 битов для поддержки национальных кодировок возникла проблема смены страниц кодировок: при обработке текстового файла необходимо было знать, на каком языке записан текст и какую именно таблицу использовать для его отображения, иначе текст мог быть неправильно отображён с использованием посторонних символов. Одинаковые символы могли иметь разные коды в разных таблицах, разные символы могли иметь один и тот же код. Это порождало несовместимость таблиц, трудность конвертации между ними.
Для языков, использующих латиницу, в 1987 г. был выпущен стандарт ISO/IEC 8859-1, закрепляющий первые 256 символов, однако даже после этого создавались кодировки, не соответствующие этому стандарту, например Windows 1252 (únicode is hard).
Первая версия стандарта Unicode 1.0.0 была выпущена организацией Unicode Consortium в октябре 1991 г.
Идея новой кодировки символов, впоследствии ставшей Юникодом, была предложена четырьмя годами ранее инженером компании Xerox Дж. Бекером и инженерами компании Apple Л. Коллинзом и М. Дейвисом. При этом сама идея 16-битного универсального кода для представления символов не была новой. На развитие идеи Юникода повлияли, в частности, принципы мультибайтового представления символов, содержащиеся в стандарте ISO/TC97/SC2 N1436 (1984), и двухбайтовые кодировки, используемые в некоторых восточных языках (Unicode® History Corner).
Значимость и перспективы развития
Благодаря тому, что стандарт объединяет наборы символов из множества различных языков мира, в том числе малоиспользуемых, Юникод широко используется при локализации программного обеспечения (ПО).
Всё больше современных информационных технологий поддерживают использование Юникода, например различные операционные системы и языки программирования.
Юникод продолжает развиваться. Последняя выпущенная мажорная версия стандарта – 15.0.0 от 13 сентября 2022 г. (Unicode® 15.0.0), в которой добавлены некоторые малоиспользуемые языки, уникальные требования к записи письма, некоторые эмодзи и др.
Недостатки
Юникод обладает рядом недостатков, связанных с фундаментальными принципами кодирования, положенными в его основу, а также относительной новизной стандарта.
Для работы с Юникодом требуется больше памяти для хранения самих текстов и шрифтов со всеми символами, чем при использовании менее универсальных кодировок.
Шрифты требуют обновления для поддержки новых символов.
Необходимость поддержки Юникода в прикладном ПО в целом и необходимость поддержки в данном ПО методов ввода произвольных символов Юникода в частности, например с помощью специальных утилит с таблицами символов, может затруднять разработку ПО и саму работу с этим ПО.
Нельзя изменить имя символа, внесённого в стандарт: в Юникоде имеются символы, в названии которых заключаются ошибки, как орфографические, так и смысловые. Наличие ошибок в стандарте корректируется использованием уникальных и формально описанных в стандарте псевдонимов для символов.
Одинаковые символы, которые можно представить различными способами (например, с использованием различных комбинаций диакритических знаков), могут иметь различное визуальное отображение.
Юникод до сих пор не способен представить абсолютно все виды письменности во всех их особенностях (например, традиционное вертикальное написание для некоторых языков, таких как китайский или корейский), однако стандарт продолжает развиваться.
Разные языки могут использовать один и тот же символ, но изменять его по-разному в особых случаях: например, символы могут иметь различное курсивное начертание (буквы «п» и «т» в русском и сербском языках) или по-другому переводиться из строчных букв в заглавные.
Наличие различных символов, отображаемых одинаково, может приводить к проблемам безопасности: например, возможностям осуществления фишинговых атак путём подмены символов в URL или сокрытия информации в тексте от средств их автоматической обработки.
Некоторые интересные случаи, касающиеся использования Юникода.
В Юникоде существует символ, назначение которого неизвестно: ⍼, или «прямой угол с зигзагообразной стрелкой вниз» (англ. right angle with downwards zigzag arrow). Насколько известно, впервые этот символ встречается в стандарте ISO/IEC TR 9573-13 (U+237c ⍼ right angle with downwards zigzag arrow). В этот стандарт символ попал из набора типографских пуансонов и, возможно, был создан для частного заказчика (update: U+237C ⍼ &angzarr). Предположительно, данный символ может являться математическим символом, но примеры его использования или указания по использованию отсутствуют.
Появление символа ú вместо символа британского фунта £ в чеках. Предположительно, связано с особенностями хранения данных в разных кодировках: символ ú имеет тот же порядковый номер (163) в наборе символов Codepage 437, что и £ в Юникоде (únicode is hard).