Уникод () е стандарт в компютърната индустрия за кодиране, представяне и обработка на текст на повечето писмености в света. Той е разработен да реши проблемите, причинявани от едновременната употреба на голям брой несъвместими помежду си традиционни кодировки за различните езици. Стандартът се поддържа от Консорциума Уникод и през 2018 г. най-новата му версия 11.0 съдържа 137 439 знака и обхваща 146 писмености на съвременни и мъртви езици, както и много символи (например от математиката и инженерните дисциплини) и емоджита. Знаковият набор на Уникод е синхронизиран със стандарта ISO/IEC 10646 и кодовете в двата стандарта са еднакви.
Стандартът Уникод се състои от комплект справочни таблици за кодовете, метод за кодиране и набор от стандартни знакови кодировки, комплект от еталонни ове с данни, както и някои документи, свързани с изброените, например относно свойствата на знаците, правилата за нормализация, декомпозиция, визуализиране и ред на изписване на двупосочен текст (за правилно показване на текст със смесени посоки на изписване: от дясно наляво, като при арабски и иврит, и от ляво надясно).
Успехът на Уникод в обединяването на знаковите набори е довел до широкото му използване и доминиращо положение в интернационализацията и локализацията на компютърен софтуер. Стандартът се използва в множество съвременни технологии, включително съвременните операционни системи, XML, езици за програмиране и .NET Framework.
Уникод може да се прилага чрез различни кодировки. Стандартът дефинира UTF-8, UTF-16, UTF-32, а в употреба са и още няколко начина за кодиране. Най-често използваните кодировки са UTF-8, UTF-16 и UCS-2, предшественик на UTF-16.
При UTF-8, използвана в над 90% от уебсайтовете, за първите 128 кода се използва по един байт, а за останалите – до 4 байта.С един байт се представят например латиницата без диакритични знаци, цифрите и основните препинателни знаци; с два – включените в стандарта латински букви с диакритични знаци, кирилицата, гръцката, арменската, еврейската и арабската азбука; с повече – африкански, азиатски, американски азбуки и др. Първите 128 кода от Уникод съвпадат с тези на ASCII, което означава, че всеки текст в ASCII е и в UTF-8.
При UCS-2 за всеки знак се използват два байта (16 бита), но така могат да се представят само първите 65 536 кода, които образуват групата Basic Multilingual Plane (BMP, Основна многоезична група). Тъй като са възможни общо 1 114 112 кода в 17 различни групи, а вече са дефинирани над 137 000 от тях, много от знаците в Уникод са извън обхвата на UCS-2. Затова тя се смята за остаряла, макар да е все още в широка употреба. UTF-16 разширява UCS-2, като използва същото 16-битово кодиране за BMP и 4-байтово – за останалите групи. Всеки текст в UCS-2, който не съдържа кодове в запазения диапазон U+D800–U+DFFF, представлява и валиден текст в UTF-16.
При UTF-32 (наричана още UCS-4) за всеки знак се използват 4 байта. Както и при UCS-2, броят байтове на знак е фиксиран, което улеснява индексирането им в паметта, но за разлика от UCS-2, с UTF-32 могат да се представят всички кодове в Уникод. Поради кодирането на всеки знак с четири байта обаче UTF-32 заема много повече памет от другите кодировки и не се използва широко.
Създаване и разработка Уникод е създаден с изричната цел да се превъзмогнат ограниченията на традиционните методи за кодиране на знаци, например дефинираните със стандарта ISO-8859, които се използват широко в различни страни на света, но до голяма степен остават несъвместими помежду си. Общ недостатък на много от традиционните знакови кодировки е, че позволяват двуезична компютърна обработка на текст (обикновено с латиница и местната писменост), но не и многоезична (компютърна обработка на произволни писмености, смесени една с друга).
Уникод, по замисъл, кодира същинските знаци – графеми и подобни на графема звена – а не техните вариантни глифове (графики). При китайските логограми това понякога води до противоречия при разграничаването на базовия знак от вариантните му глифове.
При обработка на текст ролята на Уникод е да предостави уникална кодова точка – число, а не глиф – за всеки знак. С други думи, Уникод представя знаците по абстрактен начин и оставя визуализацията им (размер, форма, шрифт или стил), на друг софтуер, например уеббраузър или текстообработваща програма. Тази проста задача обаче се усложнява заради компромиси, направени от проектантите на стандарта с надежда да насърчат по-бързото му разпространение.
Първите 256 кода са дефинирани идентично със съдържанието на ISO-8859-1, за да се улесни максимално конвертирането на съществуващ текст на латиница. Много по същество идентични знаци са кодирани няколко пъти с различни кодове, за да се запазят отличията, използвани от наследени кодировки, и така да се позволи преобразуване от тези кодировки към Уникод (и обратно) без загуба на информация. Например разделът с кодове за „форми с пълна ширина“ съдържа цяла латинска азбука, отделна от тази в главния раздел за латиница, защото в китайски, японски и корейски тези латински букви се изобразяват със същата ширина като логограмите, вместо с половин ширина.
История Началото на Уникод е поставено през 1987 г., когато Джо Бекер от Ксерокс и Лий Колинс и Марк Дейвис от Епъл започват да проучват практическите аспекти на създаването на универсален знаков набор. През август 1988 г. Джо Бекер публикува проект на предложение за „международна/многоезична система за кодиране на текстови знаци, временно наречена Уникод“. Той пояснява, че „името „Уникод“ е замислено да подсказва за уникална, единна, универсална (от англ. unique, unified, universal) система за кодиране“.
В този документ, озаглавен „Уникод 88“, Бекер описва 16-битов модел на знаците:
Уникод е предназначен да отговори на необходимостта от работещо, надеждно, многоезично кодиране на текст. Уникод може да бъде грубо описан като „широк ASCII“, разтеглен до 16 бита, за да обхване знаците на всички живи световни езици. При добре проектирана архитектура 16 бита за знак са повече от достатъчни за тази цел.
Неговата оригинална 16-битова архитектура се основава на предположението, че е необходимо кодиране само на писменостите и знаците в съвременна употреба:
Уникод дава по-висок приоритет на осигуряването на полезност за в бъдеще, отколкото на опазването на отминали антики. Уникод е предназначен на първо място за знаците, публикувани в съвременен текст (например във всички вестници и списания, отпечатани в света през 1988 г.), чийто брой е несъмнено много под 214 = 16 384. Извън тези знаци в съвременна употреба, всички други могат да бъдат определени като морално остарели или рядко използвани; те са по-добри кандидати да бъдат регистрирани за лично ползване, отколкото да задръстват публичния списък на полезните Уникодове.
В началото на 1989 г. работната група, занимаваща се с Уникод, се разширява и вече включва и Кен Уистлър и Майк Кърнаган от Метафор, Карън Смит-Йошимура и Джоан Алипран от RLG, както и Глен Райт от Сън Майкросистъмс, а през 1990 г. към нея се присъединяват Мишел Зигнард и Асмус Фрайтаг от Майкрософт и Рик Макгоуън от NeXT. До края на 1990 г. по-голямата част от работата по определяне на съществуващи стандарти за кодиране на знаците е била завършена, и окончателният проект на Уникод е готов за представяне.
Консорциумът Уникод е учреден на 3 януари 1991 г. в Калифорния, а през октомври 1991 г. е публикуван първият том на стандарта Уникод. Вторият том, който обхваща и китайските логограми, е публикуван през юни 1992 г.
През 1996 г. с Уникод 2.0 е внедрен механизъм за сурогатни знаци, с който се премахва ограничението от 16 бита. Това увеличава капацитета на Уникод до над един милион кодови единици, позволявайки кодирането на много исторически писмености (например, египетски йероглифи) и хиляди рядко използвани или остарели знаци, чието кодиране се е смятало за ненужно. Сред знаците, първоначално непредвидени за включване в Уникод, са рядко използвани канджи или китайски логограми, много от които са част от имена на хора и места и въпреки рядката си употреба са много по-важни, отколкото се предвижда в оригиналната архитектура на Уникод.
Архитектура и терминология Уникод дефинира кодово пространство от 1 114 112 кодови точки (допустими числови стойности за представяне на знаци) в диапазона от 0hex до 10FFFFhex. Обикновено кодова точка на Уникод се посочва с изписване на „U+“, следвано от шестнадесетично число. За кодова точка в групата Basic Multilingual Plane (BMP) се използват четири цифри (например за латинската главна буква X използваме U+0058). За кодови точки извън BMP се използват пет или шест цифри.
Уникод групи и блокове Уникод се разделя на седемнадесет групи (), номерирани от 0 до 16: Уникод групи и диапазони от кодови точкиОсновниДопълнителниPlane 0Plane 1Plane 2Planes 3 – 13Plane 14Planes 15 – 160000–FFFF10000–1FFFF20000–2FFFF30000–DFFFFE0000–EFFFFF0000–10FFFFBasic Multilingual PlaneSupplementary Multilingual PlaneSupplementary Ideographic PlaneunassignedSupplementary Special-purpose PlaneSupplementary Private Use AreaBMPSMPSIP—SSPSPUA-A/B0000–0FFF 1000–1FFF 2000–2FFF 3000–3FFF 4000–4FFF 5000–5FFF 6000–6FFF 7000–7FFF8000–8FFF 9000–9FFF A000–AFFF B000–BFFF C000–CFFF D000–DFFF E000–EFFF F000–FFFF10000–10FFF 11000–11FFF 12000–12FFF 13000–13FFF 14000–14FFF
16000–16FFF 17000–17FFF18000–18FFF
1B000–1BFFF
1D000–1DFFF 1E000–1EFFF 1F000–1FFFF20000–20FFF 21000–21FFF 22000–22FFF 23000–23FFF 24000–24FFF 25000–25FFF 26000–26FFF 27000–27FFF28000–28FFF 29000–29FFF 2A000–2AFFF 2B000–2BFFF 2C000–2CFFF 2D000–2DFFF 2E000–2EFFF 2F000–2FFFFE0000–E0FFF15: SPUA-A F0000–FFFFF
16: PUA-B 100000–10FFFF
Всяка кодова точка в BMP е достъпна като самостоятелна кодова единица в UTF-16 и може да се кодира с един, два или три байта в UTF-8. Кодовите точки в групите от 1 до 16 (Planes 1–16) са достъпни като сурогатни двойки в UTF-16 и се кодират с четири байта в UTF-8.
Във всяка група знаците са разпределени в блокове от логически свързани знаци. Въпреки че блоковете са с произволен размер, броят кодови точки в тях винаги е кратен на 16, а често и на 128. Знаците, необходими за дадена писменост, може да са пръснати в няколко различни блока.
Свойство „Обща категория“ Всяка кодова точка има свойство „Обща категория“ (). Основните категории са: буква, комбиниращ или ограждащ знак, число, пунктуация, символ, разделител и друго. Всяка от тези категории има подразделения. В повечето случаи за точно задаване характеристиките на дадена кодова точка е необходимо да се използват и други свойства. Възможните общи категории са: