Юнико́д () — стандарт кодирования символов, включающий в себя знаки почти всех письменных языков мира. В настоящее время стандарт является преобладающим в Интернете.

Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» (). Применение этого стандарта позволяет закодировать очень большое число символов из разных систем письменности: в документах, закодированных по стандарту Юникод, могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, символы музыкальной нотной нотации, при этом становится ненужным переключение кодовых страниц.

Стандарт состоит из двух основных частей: универсального набора символов () и семейства кодировок (). Универсальный набор символов перечисляет допустимые по стандарту Юникод символы и присваивает каждому символу код в виде неотрицательного целого числа, записываемого обычно в шестнадцатеричной форме с префиксом U+, например, U+040F. Семейство кодировок определяет способы преобразования кодов символов для передачи в потоке или в файле.

Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII, и коды этих символов совпадают с их кодами в ASCII. Далее расположены области символов других систем письменности, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем. Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F (см. Кириллица в Юникоде).

Предпосылки создания и развитие Юникода

К концу 1980-х годов стандартом стали 8-битные кодировки, их существовало уже большое множество, и постоянно появлялись новые. Это объяснялось как расширением круга поддерживаемых языков, так и стремлением создавать кодировки, частично совместимые между собой (характерный пример — появление альтернативной кодировки для русского языка, обусловленное эксплуатацией западных программ, созданных для кодировки CP437). В результате появилось несколько проблем: проблема неправильной раскодировки; проблема ограниченности набора символов; проблема преобразования одной кодировки в другую; проблема дублирования шрифтов.

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

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

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

Проблема дублирования шрифтов. Для каждой кодировки создавался свой шрифт, даже если наборы символов в кодировках совпадали частично или полностью. Проблему можно было решить путём создания «больших» шрифтов, из которых впоследствии выбирались бы нужные для данной кодировки символы. Однако это требовало создания единого реестра символов, чтобы определять, чему что соответствует.

Была признана необходимость создания единой «широкой» кодировки. Кодировки с переменной длиной символа, широко использующиеся в Восточной Азии, были признаны слишком сложными в использовании, поэтому было решено использовать символы фиксированной ширины. Использование 32-битных символов казалось слишком расточительным, поэтому было решено использовать 16-битные.

Первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 216 (). С тех пор символы стали обозначать четырьмя шестнадцатеричными цифрами (например, U+04F0). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. Редко используемые символы должны были размещаться в «области пользовательских символов» (), которая первоначально занимала коды U+D800…U+F8FF. Чтобы использовать Юникод также и в качестве промежуточного звена при преобразовании разных кодировок друг в друга, в него включили все символы, представленные во всех наиболее известных кодировках.

В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. способы представления).

Поскольку в ряде компьютерных систем (например, Windows NT) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых позиций (так называемая ). Остальное пространство используется для «дополнительных символов» (): систем письма вымерших языков или очень редко используемых китайских иероглифов, математических и музыкальных символов.

Для совместимости со старыми 16-битными системами была изобретена система UTF-16, где первые позиций, за исключением позиций из интервала U+D800…U+DFFF, отображаются непосредственно как 16-битные числа, а остальные представляются в виде «суррогатных пар» (первый элемент пары из области U+D800…U+DBFF, второй элемент пары из области U+DC00…U+DFFF). Для суррогатных пар была использована часть кодового пространства (2048 позиций), отведённого «для частного использования».

Поскольку в UTF-16 можно отобразить только 220+216−2048 () символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода (диапазон кодов: 0x000000-0x10FFFF).

Хотя кодовая область Юникода была расширена за пределы 216 уже в версии 2.0, первые символы в «верхней» области были размещены только в версии 3.1.

Юникод является самой распространённой кодировкой в веб-секторе с 2008 года. На конец 2024 года доля веб-сайтов, использующих Юникод, составила около 98,3 %.

Версии Юникода Работа по доработке стандарта продолжается. Новые версии выпускаются по мере изменения и пополнения таблиц символов. Параллельно выпускаются новые документы ISO/IEC 10646.

Первый стандарт выпущен в 1991 году, последней на данный момент версией является 16.0.0 (10 сентября 2024). Версии стандарта 1.0—5.0 публиковались как книги и имеют ISBN.

Номер версии стандарта составлен из трёх цифр (например, 3.1.1). Третью цифру меняют при внесении в стандарт небольших изменений, не добавляющих новых символов (исключение — версия 1.0.1, в которой добавлены унифицированные идеограммы китайского, японского и корейского письма).

База данных символов Юникода (Unicode Character Database) доступна для всех версий на официальном сайте как в простом текстовом, так и в XML-формате. Файлы распространяются под BSD-подобной лицензией.

+ Версии Юникода Номер версии Дата публикации ISBN книги Издание ISO/IEC 10646 Количество пись­мен­но­стейВключая единственный код (шрифт Брайля), единственную стенографическую систему (стенография Дюплойе), а также катакану, хирагану, жестовое письмо Саттон, исключая хэнтайгану (считается хираганой), два альтернативных грузинских алфавита (считаются грузинским), а также другие нетекстовые: четыре вида нот, черчение, математические знаки. Унифицированные системы (китайские и японские иероглифы; арабский, урду/шахмукхи, пегон и волофал…) считаются за одну; греческий и коптский до версии 4.1, когда их разунифицировали,— тоже. При дальнейшем обновлении данных: файл PropertyValueAliases.txt, раздел «sc», количество строк в этом разделе минус три (последние три — технические). Количество символовВключая печатаемые (), управляющие () и форматирующие () символы; не включая личные символы (), несимвольные позиции (), половины суррогатных пар (), неофициально занятые (U+1D548 ажурное ℚ при официальном U+211A — используется, чтобы гарантированно набрать слово одним шрифтом; U+11C09 бхайкшуки начальное слоговое LL — в санскрите буква есть, но не найдена в источниках именно письмом бхайкшуки). Пресс-релизы Юникода дают цифру на 65 меньше — не учитывают управляющие (00…1F, 7F…9F). Стоит признать, что категория этих символов поначалу несколько раз менялась. При дальнейшем обновлении данных: количество заявленных символов + 65. 1.0.0 Октябрь 1991 ISBN 0-201-56788-1 (Vol.1) Изначально Юникод содержал символы следующих письменностей: арабское письмо, армянское письмо, бенгальское письмо, чжуиньское письмо, кириллица, деванагари, грузинское письмо, греческое и коптское письмо, гуджарати, гурмукхи, хангыль, еврейское письмо, хирагана, каннада, катакана, лаосское письмо, латиница, малаялам, ория, тамильское письмо, телугу, тайское письмо и тибетское письмо 1.0.1 Июнь 1992 ISBN 0-201-60845-6 (Vol.2) Добавлены унифицированные идеограммы китайского, японского и корейского письма 1.1 Июнь 1993 ISO/IEC 10646-1:1993 Добавлено слогов хангыля, дополнивших уже имеющиеся в кодировке символов. Удалены символы тибетского письма 2.0 Июль 1996 ISBN 0-201-48345-9 ISO/IEC 10646-1:1993 и Amendments 5, 6, 7 Удалены добавленные ранее слоги хангыля, и добавлены новых слога хангыля с новыми кодами. Возвращены удалённые ранее символы тибетского письма; символы получили новые коды и были размещены в разных таблицах. Введён механизм суррогатных () символов. Выделено место для плоскостей () 15 и 16 2.1 Май 1998 ISO/IEC 10646-1:1993, Amendments 5, 6, 7, два символа из Amendment 18 24 Добавлены символ евро и заменяющий символ 3.0 Сентябрь 1999 ISBN 0-201-61633-5 ISO/IEC 10646-1:2000 Добавлены письмо чероки, эфиопское письмо, кхмерское письмо, монгольские письменности, бирманское письмо, огамическое письмо, руны, сингальское письмо, сирийское письмо, тана, канадское слоговое письмо и письмо и, а также символы шрифта Брайля 3.1 Март 2001 ISO/IEC 10646-1:2000 ISO/IEC 10646-2:2001 Добавлены дезеретское письмо, готское письмо и , а также символы западной и византийской музыки, унифицированных идеограмм китайского, японского и корейского письма. Выделено место для плоскостей 1, 2 и 14 3.2 Март 2002 ISO/IEC 10646-1:2000 и Amendment 1