Unicode kódování. Unicode: standard kódování znaků

Protože v řadě počítačových systémů (například Windows NT) se již jako výchozí kódování používaly pevné 16bitové znaky, bylo rozhodnuto zakódovat všechny nejdůležitější znaky pouze v rámci prvních 65 536 pozic (tzv. základní vícejazyčná rovina, BMP). Zbytek místa je použit pro „znaky navíc“. doplňkové znaky): systémy psaní zaniklých jazyků nebo velmi zřídka používané čínské znaky, matematické a hudební symboly.

Pro kompatibilitu se staršími 16bitovými systémy byl vynalezen systém UTF-16, kde prvních 65 536 pozic, vyjma pozic v intervalu U+D800...U+DFFF, je reprezentováno přímo jako 16bitová čísla a zbytek jsou reprezentovány jako "náhradní páry" "(první prvek dvojice z oblasti U+D800...U+DBFF, druhý prvek dvojice z oblasti U+DC00...U+DFFF). Pro náhradní páry byla použita část kódového prostoru (2048 pozic) dříve vyhrazená pro „znaky pro soukromé použití“.

Protože UTF-16 může zobrazit pouze 2 20 + 2 16 −2048 (1 112 064) znaků, bylo toto číslo zvoleno jako konečná hodnota prostoru kódu Unicode.

Přestože byla oblast kódu Unicode rozšířena za 2 16 již ve verzi 2.0, první znaky v oblasti „top“ byly umístěny až ve verzi 3.1.

Role tohoto kódování ve webovém sektoru neustále roste, na začátku roku 2010 byl podíl webů využívajících Unicode cca 50 %.

Unicode verze

Vzhledem k tomu, že se tabulka znaků systému Unicode mění a doplňuje a jsou vydávány nové verze tohoto systému - a tato práce pokračuje, protože systém Unicode zpočátku zahrnoval pouze rovinu 0 - dvoubajtové kódy - jsou také vydávány nové dokumenty ISO. Systém Unicode existuje celkem v následujících verzích:

  • 1.1 (odpovídá normě ISO/IEC 10646-1:), 1991-1995.
  • 2.0, 2.1 (stejná norma ISO/IEC 10646-1:1993 plus dodatky: „Dodatky“ 1 až 7 a „Technické opravy“ 1 a 2), norma z roku 1996.
  • 3.0 (norma ISO/IEC 10646-1:2000), norma 2000.
  • 3.1 (normy ISO/IEC 10646-1:2000 a ISO/IEC 10646-2:2001), norma 2001.
  • 3.2, 2002 standard.
  • 4.0, standardní.
  • 4.01, standardní.
  • 4.1, standardní.
  • 5.0, standardní.
  • 5.1, standardní.
  • 5.2, standardní.
  • 6.0, standardní.
  • 6.1, standardní.
  • 6.2, standardní.

Kódový prostor

Ačkoli zápisy UTF-8 a UTF-32 umožňují zakódovat až 2,31 (2,147,483,648) kódových pozic, bylo rozhodnuto použít pouze 1,112,064 pro kompatibilitu s UTF-16. I to je však více než dost – dnes se (ve verzi 6.0) používá necelých 110 000 kódových pozic (109 242 grafických a 273 dalších symbolů).

Kódový prostor je rozdělen na 17 letadla 2 16 (65536) znaků každý. Základní rovina se nazývá základní, obsahuje symboly nejpoužívanějších skriptů. První rovina se používá především pro historické spisy, druhá pro zřídka používané znaky KKY, třetí je vyhrazena pro archaické čínské znaky. Letadla 15 a 16 jsou určena pro soukromé použití.

K označení znaků Unicode se používá zápis jako „U+“. xxxx"(pro kódy 0...FFFF), nebo "U+ xxxxx"(pro kódy 10000...FFFFF), nebo "U+ xxxxxx"(pro kódy 100000...10FFFF), kde xxx- hexadecimální číslice. Například znak "I" (U+044F) má kód 044F = 1103.

Systém kódování

Univerzální kódovací systém (Unicode) je soubor grafických znaků a způsob jejich kódování pro počítačové zpracování textových dat.

Grafické symboly jsou symboly, které mají viditelný obrázek. Grafické znaky jsou kontrastovány s řídicími znaky a formátovacími znaky.

Grafické symboly zahrnují následující skupiny:

  • písmena obsažená alespoň v jedné z podporovaných abeced;
  • čísla;
  • interpunkční znaménka;
  • speciální znaky (matematické, technické, ideogramy atd.);
  • oddělovače.

Unicode je systém pro lineární reprezentaci textu. Znaky, které mají další prvky horního nebo dolního indexu, mohou být reprezentovány jako sekvence kódů vytvořených podle určitých pravidel (složený znak) nebo jako jeden znak (monolitická varianta, předem složený znak).

Úprava postav

Znázornění symbolu „И“ (U+0419) jako základního znaku „И“ (U+0418) a modifikačního znaku „ ̆“ (U+0306)

Grafické znaky se v Unicode dělí na rozšířené a nerozšířené (bez šířky). Nerozšířené znaky při zobrazení nezabírají místo v řádku. Jedná se zejména o diakritiku a další diakritiku. Rozšířené i nerozšířené symboly mají své vlastní kódy. Rozšířené symboly se jinak nazývají základní symboly. základní znaky), a nerozšířené - modifikující (angl. kombinování znaků); Navíc se posledně jmenovaní nemohou setkat nezávisle. Například znak "á" může být reprezentován jako posloupnost základního znaku "a" (U+0061) a modifikačního znaku " ́" (U+0301), nebo jako monolitický znak "á" (U+ 00C1).

Speciálním typem modifikujících znaků jsou selektory stylových variant. selektory variací). Ovlivňují pouze ty symboly, pro které jsou takové varianty definovány. Ve verzi 5.0 jsou definovány varianty stylu pro řadu matematických symbolů, pro symboly tradiční mongolské abecedy a pro symboly mongolského čtvercového písma.

Formy normalizace

Vzhledem k tomu, že stejné znaky mohou být reprezentovány různými kódy, což někdy znesnadňuje zpracování, existují normalizační procesy určené k redukci textu do určité standardní formy.

Standard Unicode definuje 4 formy normalizace textu:

  • Normalizační forma D (NFD) je kanonický rozklad. V procesu převedení textu do této formy jsou všechny složené znaky rekurzivně nahrazeny několika složenými v souladu s rozkladovými tabulkami.
  • Normalizační forma C (NFC) je kanonický rozklad následovaný kanonickým složením. Nejprve je text redukován do formy D, poté je provedena kanonická kompozice - text je zpracováván od začátku do konce a jsou dodržována následující pravidla:
    • Symbol S je počáteční, pokud má modifikační třídu nula ve znakové základně Unicode.
    • V jakékoli sekvenci znaků začínajících počátečním znakem S je znak C blokován od S tehdy a pouze tehdy, když mezi S a C existuje jakýkoli znak B, který je buď počátečním znakem nebo má stejnou nebo vyšší třídu modifikace než C. To toto pravidlo platí pouze pro řetězce, které prošly kanonickým rozkladem.
    • Primární Složený znak je znak, který má kanonickou dekompozici ve znakové základně Unicode (nebo kanonickou dekompozici pro Hangul a není zahrnut v seznamu výjimek).
    • Znak X může být primárně složen se znakem Y tehdy a pouze tehdy, pokud existuje primární složený Z, který je kanonicky ekvivalentní posloupnosti. .
    • Pokud další symbol C není blokován posledním nalezeným počátečním základním symbolem L a lze jej s ním úspěšně primárně zkombinovat, pak je L nahrazeno kompozitem L-C a C je odstraněno.
  • Normalizační forma KD (NFKD) je kompatibilní rozklad. Při odevzdání do této formy jsou všechny základní znaky nahrazeny pomocí jak kanonických dekompozičních map Unicode, tak kompatibilních dekompozičních map a výsledek je pak uveden do kanonického pořadí.
  • Normalizační forma KC (NFKC) - kompatibilní rozklad následovaný kanonický složení.

Pojmy „složení“ a „rozklad“ znamenají spojení nebo rozklad symbolů na jejich součásti.

Příklady

Zdroj NFD NFC NFKD NFKC
Français Franc\u0327ais Fran\xe7ais Franc\u0327ais Fran\xe7ais
A, E, J \u0410, \u0401, \u0419 \u0410, \u0415\u0308, \u0418\u0306 \u0410, \u0401, \u0419
\u304b\u3099 \u304c \u304b\u3099 \u304c
Jindřich IV Jindřich IV Jindřich IV Jindřich IV Jindřich IV
Henry Ⅳ Henry\u2163 Henry\u2163 Jindřich IV Jindřich IV

Obousměrné psaní

Standard Unicode podporuje jazyky psané v obou směrech psaní zleva doprava. zleva doprava, LTR) a psaním zprava doleva (anglicky. zprava doleva, RTL) - například arabské a hebrejské písmo. V obou případech jsou znaky uloženy v "přirozeném" pořadí; jejich zobrazení zohledňující požadovaný směr psaní zajišťuje aplikace.

Unicode navíc podporuje kombinované texty, které kombinují fragmenty s různými směry psaní. Tato funkce se nazývá obousměrnost(Angličtina) obousměrný text, BiDi). Některé lehké vykreslovače textu (například ty, které se nacházejí v mobilních telefonech) mohou podporovat Unicode, ale nepodporují obousměrnost. Všechny znaky Unicode jsou rozděleny do několika kategorií: znaky psané zleva doprava, znaky psané zprava doleva a znaky psané libovolným směrem. Poslední kategorie znaků (většinou interpunkčních znamének) při zobrazení přebírá směr okolního textu.

Vybrané postavy

Unicode zahrnuje prakticky všechny moderní skripty, včetně:

a další.

Pro akademické účely bylo přidáno mnoho historických písem, včetně: run, starověké řečtiny, egyptských hieroglyfů, klínového písma, mayského písma, etruské abecedy.

Unicode poskytuje širokou škálu matematických a hudebních symbolů a piktogramů.

Unicode však obecně nezahrnuje loga společností a produktů, ačkoli se objevují v písmech (například logo Apple v MacRoman (0xF0) nebo logo Windows ve Wingdings (0xFF)). V písmech Unicode by loga měla být umístěna pouze v oblasti vlastních znaků.

ISO/IEC 10646

Unicode Consortium úzce spolupracuje s pracovní skupinou ISO/IEC/JTC1/SC2/WG2, která vyvíjí mezinárodní standard 10646 (ISO/IEC 10646). Existuje synchronizace mezi standardem Unicode a ISO/IEC 10646, ačkoli každý standard používá svou vlastní terminologii a systém dokumentace.

Spolupráce mezi Unicode Consortium a International Organization for Standardization. Mezinárodní organizace pro normalizaci, ISO ) začala v roce 1991. V roce 1993 vydala ISO standard DIS 10646.1. Pro synchronizaci s ním konsorcium schválilo standard Unicode verze 1.1, který obsahoval další znaky z DIS 10646.1. V důsledku toho se významy kódovaných znaků v Unicode 1.1 a DIS 10646.1 zcela shodovaly.

Následně spolupráce mezi oběma organizacemi pokračovala. V roce 2000 byl standard Unicode 3.0 synchronizován s ISO/IEC 10646-1:2000. Nadcházející třetí verze ISO/IEC 10646 bude synchronizována s Unicode 4.0. Možná budou tyto specifikace dokonce zveřejněny jako jednotný standard.

Podobně jako formáty UTF-16 a UTF-32 ve standardu Unicode má standard ISO/IEC 10646 také dvě základní formy kódování znaků: UCS-2 (2 bajty na znak, podobně jako UTF-16) a UCS-4 (4 bajty na znak, podobně jako UTF-32). UCS znamená univerzální víceoktet(vícebajtové) kódovaná znaková sada(Angličtina) univerzální víceoktetová kódovaná znaková sada ). UCS-2 lze považovat za podmnožinu UTF-16 (UTF-16 bez náhradních párů) a UCS-4 je synonymem pro UTF-32.

Prezentační metody

Unicode má několik forem reprezentace. Transformační formát Unicode, UTF ): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) a UTF-32 (UTF-32BE, UTF-32LE). Forma reprezentace UTF-7 byla také vyvinuta pro přenos přes sedmibitové kanály, ale kvůli nekompatibilitě s ASCII nebyla široce používána a není součástí standardu. 1. dubna 2005 byly navrženy dvě vtipné reprezentační formy: UTF-9 a UTF-18 (RFC 4042).

Unicode UTF-8: 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000800 - 0x0000800 - 0x000800 - 0x000800 - 0x000800x1x00x1x00x00000800 0xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Teoreticky možné, ale také nezahrnuté ve standardu:

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFxx10x10x10x10x10x10x 10xxxxxx 10xxxxxx

Ačkoli UTF-8 umožňuje zadat stejný znak několika způsoby, správný je pouze ten nejkratší. Jiné formuláře by měly být z bezpečnostních důvodů odmítnuty.

Pořadí bajtů

V datovém toku UTF-16 lze horní bajt zapsat buď před dolní bajt. UTF-16 big-endian), nebo po mladším (anglicky) UTF-16 little-endian). Podobně existují dvě možnosti pro čtyřbajtové kódování – UTF-32BE a UTF-32LE.

Pro určení formátu reprezentace Unicode se na začátek textového souboru zapíše podpis – znak U+FEFF (zero-width non-breaking space), také tzv. značka pořadí bajtů(Angličtina) značka pořadí bajtů, kusovník ). To umožňuje rozlišovat mezi UTF-16LE a UTF-16BE, protože znak U+FFFE neexistuje. Tato metoda se také někdy používá k označení formátu UTF-8, ačkoli koncept pořadí bajtů se na tento formát nevztahuje. Soubory podle této konvence začínají následujícími bajtovými sekvencemi:

UTF-8 EF BB BF UTF-16BE FE FF UTF-16LE FF FE UTF-32BE 00 00 FE FF UTF-32LE FF FE 00 00

Bohužel tato metoda spolehlivě nerozlišuje mezi UTF-16LE a UTF-32LE, protože znak U+0000 je povolen Unicode (ačkoli skutečný text jím začíná jen zřídka).

Soubory s kódováním UTF-16 a UTF-32, které neobsahují kusovník, musí být v pořadí bajtů big-endian (unicode.org).

Unicode a tradiční kódování

Zavedení Unicode vedlo ke změně přístupu k tradičnímu 8bitovému kódování. Pokud dříve bylo kódování určeno písmem, nyní je určeno tabulkou shody mezi daným kódováním a Unicode. Ve skutečnosti se 8bitové kódování stalo formou reprezentace podmnožiny Unicode. Díky tomu bylo mnohem snazší vytvářet programy, které potřebují pracovat s mnoha různými kódováními: nyní, abyste přidali podporu pro další kódování, stačí přidat další konverzní tabulku Unicode.

Mnoho datových formátů navíc umožňuje vložit libovolné znaky Unicode, i když je dokument napsán ve starém 8bitovém kódování. Například v HTML můžete použít kódy s ampersandem.

Implementace

Většina moderních operačních systémů poskytuje určitý stupeň podpory Unicode.

Jednou z prvních úspěšných komerčních implementací Unicode bylo programovací prostředí Java. Zásadně opustila 8bitovou reprezentaci znaků ve prospěch 16bitové. Většina programovacích jazyků nyní podporuje řetězce Unicode, i když jejich reprezentace se může lišit v závislosti na implementaci.

Metody zadávání

Konzole GNU/Linux také umožňuje zadat znak Unicode svým kódem – k tomu je třeba zadat desetinný kód znaku pomocí čísel bloku rozšířené klávesnice při stisknuté klávese Alt. Znaky můžete zadávat podle jejich hexadecimálního kódu: k tomu musíte podržet klávesu AltGr a pro zadání čísel A-F použijte klávesy rozšířeného bloku klávesnice od NumLock po Enter (ve směru hodinových ručiček). Podporován je také vstup v souladu s ISO 14755 Aby výše uvedené metody fungovaly, musíte v konzole povolit režim Unicode voláním unicode_start (1) a vybrat vhodný font voláním setfont (8).

Pravopis „Unicode“ se již pevně usadil v ruskojazyčných textech. Podle Yandexu je frekvence používání tohoto slova přibližně 11krát vyšší než Unicode. Wikipedia používá běžnější verzi.

Webová stránka Konsorcia má speciální stránku, která pojednává o problémech přenosu slova „Unicode“ v různých jazycích a systémech psaní. Pro ruskou azbuku je označena možnost „Unicode“.

Formuláře přijaté zahraničními organizacemi pro ruský překlad slova „Unicode“ jsou poradní.

Viz také

  • Projekt: Zavedení symbolů abeced národů Ruska do Unicode

Poznámky

  1. Přepisy Unicode (anglicky). Archivováno z originálu 22. srpna 2011. Získáno 10. května 2010.
  2. Unicode ve slovníku Paratype
  3. Norma Unicode®: Technický úvod. Archivováno
  4. Historie vydání Unicode a data vydání. Archivováno z originálu 22. srpna 2011. Získáno 4. července 2010.
  5. Konsorcium Unicode. Archivováno z originálu 22. srpna 2011. Získáno 4. července 2010.
  6. Předmluva. Archivováno z originálu 22. srpna 2011. Získáno 4. července 2010.
  7. Obecná struktura. Archivováno z originálu 22. srpna 2011. Získáno 5. července 2010.
  8. Evropská abecední písma. Archivováno z originálu 22. srpna 2011. Získáno 4. července 2010.
  9. Unicode 88. Archivováno z originálu 22. srpna 2011. Získáno 8. července 2010.
  10. Unicode a Microsoft Windows NT (anglicky). Podpora společnosti Microsoft. Archivováno
  11. Unicode se používá na téměř 50 % webových stránek (v ruštině). Archivováno z originálu 22. srpna 2011.
  12. Plán k TIP (terciární ideografická rovina)
  13. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (anglicky)
  14. Případ Unicode není snadný
  15. Většina PC písem implementuje "velká" (majuskule) jednoprostorové číslice.
  16. V některých případech může dokument (nikoli prostý text) v Unicode zabírat podstatně méně místa než dokument v jednobajtovém kódování. Pokud například určitá webová stránka obsahuje přibližně stejný počet ruského a řeckého textu, pak v jednobajtovém kódování budete muset napsat buď ruská nebo řecká písmena s využitím možností formátu dokumentu ve formě kódů s ampersand, který zabírá 6-7 bajtů na znak (při použití desítkových kódů), tj. v průměru zabere písmeno 3,5-4 bajtů, zatímco UTF-8 zabere pouze 2 bajty na řecké nebo ruské písmeno.
  17. Jeden ze souborů písem Arial Unicode má velikost 24 megabajtů; Existuje Times New Roman, který má velikost 120 megabajtů a obsahuje téměř 65 536 znaků.
  18. I pro nejmodernější a nejdražší mobilní telefon je obtížné vyčlenit 120 MB paměti pro plné písmo Unicode. V praxi je použití plných písem vyžadováno jen zřídka.
  19. 350 tisíc stránek „Unicode“ versus 31 tisíc stránek „Unicode“.

Odkazy

  • Oficiální stránky Unicode Consortium (anglicky)
  • Unicode v adresáři odkazů projektu Open Directory (dmoz). (Angličtina)
  • Co je Unicode? (Ruština)
  • Nejnovější verze

Unicode je velmi rozsáhlý a složitý svět, protože standard umožňuje reprezentovat a pracovat na počítači se všemi hlavními skripty světa. Některé systémy psaní existují již více než tisíc let, přičemž mnohé z nich se v různých částech světa vyvíjely téměř nezávisle na sobě. Lidé přišli s tolika věcmi a často se od sebe tak liší, že spojit je všechny do jednoho standardu byl nesmírně obtížný a ambiciózní úkol.

Abyste Unicode skutečně pochopili, musíte alespoň povrchně rozumět vlastnostem všech skriptů, se kterými vám standard umožňuje pracovat. Ale je to to, co každý vývojář potřebuje? Řekneme ne. Pro použití Unicode pro většinu každodenních úkolů stačí znát přiměřené minimum znalostí a pak se podle potřeby ponořit do standardu.

V tomto článku budeme hovořit o základních principech Unicode a upozorníme na ty důležité praktické problémy, se kterými se vývojáři jistě setkají při své každodenní práci.

Proč bylo potřeba Unicode?

Před příchodem Unicode se téměř všeobecně používalo jednobajtové kódování, ve kterém byla hranice mezi samotnými znaky, jejich reprezentace v paměti počítače a zobrazení na obrazovce zcela libovolné. Pokud jste pracovali s jedním nebo druhým národním jazykem, pak byly do vašeho systému nainstalovány odpovídající kódovací fonty, které vám umožnily čerpat bajty z disku na obrazovku tak, aby dávaly uživateli smysl.

Pokud jste na tiskárně vytiskli textový soubor a na stránce papíru jste viděli sadu nesrozumitelných nesmyslů, znamenalo to, že se do tiskového zařízení nenačetla vhodná písma a zařízení neinterpretovalo bajty tak, jak byste chtěli.

Tento přístup obecně a jednobajtové kódování zvláště mělo řadu významných nevýhod:

  1. Souběžně bylo možné pracovat pouze s 256 znaky, přičemž prvních 128 bylo vyhrazeno pro latinku a řídicí znaky a v druhé polovině bylo nutné kromě znaků národní abecedy najít místo pro znaky pseudografické ( ╔ ╗).
  2. Písma byla vázána na konkrétní kódování.
  3. Každé kódování představovalo vlastní sadu znaků a převod z jednoho na druhý byl možný pouze s částečnými ztrátami, kdy byly chybějící znaky nahrazeny graficky podobnými.
  4. Přenos souborů mezi zařízeními s různými operačními systémy byl obtížný. Buď jste museli mít konvertorový program, nebo spolu se souborem nosit další písma. Existence internetu, jak ho známe, byla nemožná.
  5. Na světě existují neabecední systémy psaní (hieroglyfické písmo), které v zásadě nelze znázornit v jednobajtovém kódování.

Základní principy Unicode

Všichni dobře rozumíme tomu, že počítač nezná žádné ideální entity, ale pracuje s bity a bajty. Ale počítačové systémy jsou stále vytvářeny lidmi, ne stroji, a pro nás a pro nás je někdy pohodlnější pracovat se spekulativními pojmy a pak přejít od abstraktního ke konkrétnímu.

Důležité! Jedním z ústředních principů filozofie Unicode je jasné rozlišení mezi znaky, jejich reprezentací v počítači a jejich zobrazením na výstupním zařízení.

Zavádí se koncept abstraktního znaku Unicode, existující pouze ve formě spekulativního konceptu a dohody mezi lidmi, zakotvené ve standardu. Každý znak Unicode je spojen s nezáporným celým číslem, které se nazývá jeho kódový bod.

Například znak Unicode U+041F je velké písmeno azbuky P. Existuje několik způsobů, jak tento znak znázornit v paměti počítače, stejně jako existuje několik tisíc způsobů, jak jej zobrazit na obrazovce monitoru. Ale zároveň P to bude i P nebo U+041F v Africe.

Jedná se o známé zapouzdření nebo oddělení rozhraní od implementace – koncept, který se dobře osvědčil v programování.

Ukazuje se, že podle standardu lze jakýkoli text zakódovat jako sekvenci znaků Unicode

Dobrý den U+041F U+0440 U+0438 U+0432 U+0435 U+0442

napište to na kus papíru, zabalte do obálky a pošlete do kterékoli části Země. Pokud vědí o existenci Unicode, pak text budou vnímat úplně stejně jako vy a já. Nebudou mít nejmenší pochyby o tom, že předposledním znakem je malá azbuka E(U+0435), a neříkej latinsky malý E(U+0065). Všimněte si, že jsme neřekli ani slovo o reprezentaci bajtů.

Unicode kódový prostor

Kódový prostor Unicode se skládá z 1 114 112 kódových pozic v rozsahu od 0 do 10FFFF. Z toho pouze 128 237 bylo přiřazeno hodnotám pro devátou verzi standardu Část prostoru je vyhrazena pro soukromé použití a Unicode Consortium slibuje, že nikdy nepřiřadí hodnoty pozicím v těchto speciálních oblastech.

Celý prostor je z důvodu pohodlí rozdělen do 17 rovin (v současné době jich je využíváno šest). Donedávna se běžně říkalo, že se s největší pravděpodobností setkáte pouze se základní vícejazyčnou rovinou (BMP), která obsahuje znaky Unicode od U+0000 po U+FFFF. (Když se podíváme trochu dopředu: znaky z BMP jsou v UTF-16 zastoupeny dvěma bajty, nikoli čtyřmi). V roce 2016 je tato teze již zpochybňována. Například oblíbené znaky Emoji se mohou objevit ve zprávě uživatele a musíte je umět správně zpracovat.

Kódování

Pokud chceme posílat text přes internet, budeme muset zakódovat sekvenci znaků Unicode jako sekvenci bajtů.

Standard Unicode zahrnuje popis řady kódování Unicode, jako je UTF-8 a UTF-16BE/UTF-16LE, které umožňují kódování celého znakového prostoru. Převod mezi těmito kódováními lze volně provádět bez ztráty informací.

Nikdo také nezrušil jednobajtová kódování, ale umožňují vám zakódovat vlastní individuální a velmi úzký kousek spektra Unicode – 256 nebo méně kódových pozic. Pro taková kódování existují a jsou dostupné všem tabulky, kde každá hodnota jednoho bajtu je spojena se znakem Unicode (viz například CP1251.TXT). Navzdory omezením se jednobajtové kódování ukazuje jako velmi praktické, pokud jde o práci s velkým množstvím jednojazyčných textových informací.

Z kódování Unicode je na internetu nejrozšířenější UTF-8 (vyhrálo palmu v roce 2008), a to především díky své efektivitě a transparentní kompatibilitě se sedmibitovým ASCII. Latinské a služební znaky, základní interpunkční znaménka a číslice - tzn. všechny sedmibitové znaky ASCII jsou kódovány v UTF-8 jako jeden bajt, stejně jako v ASCII. Znaky mnoha hlavních písem, nepočítaje některé vzácnější hieroglyfické znaky, jsou v něm zastoupeny dvěma nebo třemi bajty. Největší pozice kódu definovaná standardem, 10FFFF, je zakódována ve čtyřech bytech.

Upozorňujeme, že UTF-8 je kódování s proměnnou délkou kódu. Každý znak Unicode v něm je reprezentován sekvencí kódových kvant o minimální délce jednoho kvanta. Číslo 8 znamená bitovou délku kódové jednotky (kódové jednotky) - 8 bitů. Pro rodinu kódování UTF-16 je velikost kvanta kódu odpovídajícím způsobem 16 bitů. Pro UTF-32 - 32 bitů.

Pokud posíláte HTML stránku s textem v azbuce přes síť, pak UTF-8 může poskytnout velmi významnou výhodu, protože všechny značky, stejně jako bloky JavaScriptu a CSS, budou efektivně zakódovány do jednoho bajtu. Například hlavní stránka Habr v UTF-8 zabírá 139Kb a v UTF-16 už 256Kb. Pro srovnání, pokud použijete win-1251 se ztrátou možnosti uložit některé znaky, velikost se zmenší pouze o 11Kb.

Pro ukládání informací o řetězcích v aplikacích se často používají 16bitové kódování Unicode díky své jednoduchosti a také skutečnosti, že znaky hlavních světových psacích systémů jsou zakódovány v jednom šestnáctibitovém kvantu. Java například úspěšně používá UTF-16 pro interní reprezentaci řetězců. Operační systém Windows také interně používá UTF-16.

V každém případě, pokud zůstaneme v prostoru Unicode, nezáleží na tom, jak jsou informace o řetězcích uloženy v jednotlivé aplikaci. Pokud formát interního úložiště umožňuje správně zakódovat všechny více než milionové kódové pozice a nedochází ke ztrátě informací na hranici aplikace, například při čtení ze souboru nebo kopírování do schránky, je vše v pořádku.

Chcete-li správně interpretovat text čtený z disku nebo ze síťového soketu, musíte nejprve určit jeho kódování. To se provádí buď pomocí metainformací poskytnutých uživatelem, zapsaných v textu nebo vedle něj, nebo určených heuristicky.

Sečteno a podtrženo

Informací je mnoho a má smysl uvést stručné shrnutí všeho, co bylo napsáno výše:

  • Unicode předpokládá jasné rozlišení mezi znaky, jejich reprezentací v počítači a jejich zobrazením na výstupním zařízení.
  • Kódový prostor Unicode se skládá z 1 114 112 kódových pozic v rozsahu od 0 do 10FFFF.
  • Základní vícejazyčná rovina obsahuje znaky Unicode U+0000 až U+FFFF, které jsou kódovány v UTF-16 jako dva bajty.
  • Jakékoli kódování Unicode vám umožňuje zakódovat celý prostor pozic kódu Unicode a převod mezi různými takovými kódováními se provádí bez ztráty informací.
  • Jednobajtové kódování umožňuje kódování pouze malé části spektra Unicode, ale může být užitečné při práci s velkým množstvím jednojazyčných informací.
  • Kódování UTF-8 a UTF-16 mají proměnnou délku kódu. V UTF-8 může být každý znak Unicode zakódován do jednoho, dvou, tří nebo čtyř bajtů. V UTF-16 - dva nebo čtyři bajty.
  • Interní formát pro ukládání textových informací v rámci samostatné aplikace může být libovolný, pokud správně pracuje s celým prostorem pozic v kódu Unicode a nedochází ke ztrátám při přeshraničním přenosu dat.

Rychlá poznámka o kódování

S pojmem kódování může docházet k určité záměně. V rámci Unicode se kódování vyskytuje dvakrát. Při prvním zakódování znakové sady Unicode v tom smyslu, že každému znaku Unicode je přiřazena odpovídající pozice kódu. Tento proces změní znakovou sadu Unicode na kódovanou znakovou sadu. Podruhé se sekvence znaků Unicode převede na bajtový řetězec a tento proces se také nazývá kódování.

V anglické terminologii existují dvě různá slovesa, to code a to encode, ale často se s nimi zaměňují i ​​rodilí mluvčí. Kromě toho se termín znaková sada nebo znaková sada používá jako synonymum pro termín kódovaná znaková sada.

To vše říkáme tomu, že má smysl věnovat pozornost kontextu a rozlišovat mezi situacemi, kdy mluvíme o kódové pozici abstraktního Unicode znaku a kdy mluvíme o jeho bytové reprezentaci.

Na závěr

Existuje tolik různých aspektů Unicode, že je nemožné pokrýt vše v jednom článku. A je to zbytečné. Výše uvedené informace stačí k tomu, aby nedošlo k záměně v základních principech a práci s textem ve většině každodenních úkolů (čtěte: aniž byste překračovali BMP). V následujících článcích budeme hovořit o normalizaci, poskytneme úplnější historický přehled o vývoji kódování, budeme hovořit o problémech terminologie Unicode v ruském jazyce a také o praktických aspektech používání UTF-8 a UTF-16. .

Strojem psaný text se skládá z tištěných znaků - grafických symbolů.
Grafické symboly jsou symboly, které mají viditelné zobrazení v textu.
Všechny grafické symboly jsou shromážděny v sadě jediného univerzálního systému Unicode.
Vložte grafický symbol Unicode do html dokumentu
- hlavní a jediný účel tohoto stolu.

Symbol můžete do dokumentu HTML vložit jedním z následujících způsobů:

  1. zkopírujte obrázek symbolu z okna prohlížeče do okna vašeho vizuálního html editoru
  2. zkopírujte html kód symbolu přímo do kódu html dokumentu
Pochopte prosím, že se jedná o dvě různé metody:
  1. vložit vizuál do vizuálu
  2. vložte kód do kódu.

Písmo pro symbol, jeho velikost a barvu v HTML lze nastavit pomocí kódu jako:
CHARACTER_CODE
Kde,
Arial - písmo,
10px - velikost písma v pixelech,
#ff0000 - kód barvy písma (červená)

Například:
☎ - velikost písma znaků 30px,
☎ - velikost písma symbolu 30px, barva - červená
☎ - velikost písma znaků 20px,
☎ - velikost písma symbolu 10px.
Poznámka Doporučené fonty pro vkládání speciálních znaků jsou Arial, Verdana a Tahoma. Tato písma správně zobrazují znaky Unicode a jsou sama o sobě správně podporována webovými aplikacemi.

  1. "Symbol"
    (zobrazení viditelných symbolů)
    Z tohoto sloupce můžete zkopírovat obrázek symbolu a vložit jej do okna html textového editoru. Symbol bude zkopírován s velikostí písma 20 pixelů. Po dokončení kopírování může být nutné individuálně upravit velikost písma přímo na kopírovaný znak.
  2. "Jméno"
    (pouze pro důležité nebo nejasné znaky)
    Vysvětlení účelu symbolu, jeho rozsah, příklady...
  3. "mnemotechnické pomůcky"
    Mnemotechnická pomůcka je abecední konstrukce tvaru ", označující abecední kód znaku v HTML. Vkládá se přímo do html kódu html dokumentu. Mnemotechnické pomůcky jsou velmi oblíbené mezi profesionálními návrháři rozvržení. Lidé si je dokonale zapamatují a jsou podporovány všemi html aplikacemi Každá mnemotechnická pomůcka obsahuje abecední název (označení ) svého symbolu a servisní znak (&), který slouží jako signál pro prohlížeč ke čtení kódu a nezobrazuje se na obrazovce monitoru každá mnemotechnická pomůcka je jedinečná a snadno čitelná, protože je odvozena z anglického slova, které symbol charakterizuje.

    Mnemotechnika (řecky) – umění si něco zapamatovat. Mnemotechnické pomůcky se používají k usnadnění vnímání obtížně zapamatovatelných informací, když je předmět zapamatování uveden do asociativního stavu s něčím.

  4. "Kód"
    Kód – číselný desítkový kód znaku v HTML, jako je &. Vloženo přímo do html kódu html dokumentu. Desetinný kód se skládá z čísla označujícího sériové číslo znaku v systému Unicode a několika servisních znaků (& a #), které slouží jako signál pro prohlížeč ke čtení kódu a nejsou zobrazeny na obrazovce monitoru. Číselný desítkový kód je široce používán a používán díky své univerzálnosti a snadnému vnímání.

Ovládací znaky v HTML (XHTML)

Řídicí znaky v HTML (XHTML) jsou servisní znaky jazyka HTML, které se používají v rozvržení HTML webové stránky. Každý prohlížeč musí tyto znaky podporovat, protože bez nich není možné správně zobrazit HTML text. Řídicí znaky se v textu nezobrazují a při přímém zadání z klávesnice je prohlížeč interpretuje jako interpunkční znaménka vyžadující provedení nějaké akce při vykreslení stránky na obrazovku.

Je povoleno používat řídicí znaky v běžných textech, kde symbolizují univerzální pojmy a jsou prohlížečem interpretovány jako běžné typografické znaky. Při použití symbolů služeb v textech HTML tímto způsobem je třeba zadat nikoli hodnotu samotného symbolu, ale jeho HTML kód. Protože, opakuji, jinak bude prohlížeč vnímat symbol služby jako výzvu k akci a nebude správně zobrazovat HTML text na obrazovce monitoru.

Ovládací symboly a jejich HTML kód znají a rozumí jim všechny prohlížeče bez výjimky, což se bohužel nedá říci o jiných symbolech, které se mohou v různých prohlížečích zobrazovat nesprávně nebo v horším případě nezobrazovat vůbec.

Syntaxe a interpunkce

mezera délky N (běžná mezera)
mezera délky M (longspace)
- měkký spojovník (netisknutelný znak) - ­
pomlčka –
- čárka délky N (běžná čárka) -
pomlčka délky M (em pomlčka)
. tečka .
, čárka ,
elipsy …
: dvojtečka :
; středník ;
! vykřičník !
ǃ
? otazník ?
@ "pes" @
* "hvězda" *
# "mříž" #
jeden levý horní citát ‘
jeden pravý horní citát ’
jediný pravý dolní citát ‚
dvojitá nabídka vlevo nahoře “
dvojitá pravá horní citace ”
dvojitá pravá spodní citace &bdquo „
« dvojité uvozovky v levém rohu (Rus) « «
» dvojité pravé rohové uvozovky (rus) » »
́ přízvuk, příklad: Vasya ́
" apostrof, příklad: Ty"Já "
´ akutní, příklad: Vasja ´ ´
odstavec (netisknutelný znak)
§ odstavec § §
ˆ přízvuk (obrácený pták) ˆ ˆ
ˆ
˜ malá vlnovka ˜ ˜
˜
¦ svislá tečkovaná čára ¦ ¦
( levá závorka (
) pravá závorka )
levá úhlová závorka
pravoúhlý držák
levá úhlová konzola, možnost
pravoúhlý držák, možnost
[ hranatá závorka vlevo [
] hranatá závorka vpravo ]
/ lomítko - lomítko znak /
\ obrácené lomítko \
lomítko (oddělovací znak)
ǀ vertikální lišta ǀ
ǁ dvojitá vertikální lišta ǁ
podložení, příklad: Vasya‾vasya
¯ macron, příklad: Vasya¯vasya ¯ ¯

Ochranné známky a měna

+ plus + +
mínus -
= rovná se =
± plus nebo mínus ± ±
× znak násobení × ×
÷ znamení divize ÷ ÷
tečkový operátor (uprostřed řádku) ·
operátor hvězdička (uprostřed řádku)
operátor tildy
. značka seznamu (uprostřed řádku) . •
¹ horní index "1" ¹ ¹
² horní index "2" ² ²
³ horní index "3" ³ ³
Horní a dolní index v HTML (XHTML)
lze vložit pomocí značek A , respektive:
ČÍSLO Horní index→ ČÍSLO Horní index
ČÍSLO Dolní index→ ČÍSLO Dolní index
½ zlomek "jedna polovina" ½ ½
zlomek "jedna třetina"
¼ zlomek "jedna čtvrtina" ¼ ¼
¾ zlomek "tři čtvrtiny" ¾ ¾
znak čísla
% procent %
ppm ‰
° stupně ° °
prvočíslo (minuty, stopy)
dvojité prvočíslo (sekundy, palce)
Příklad 1: 30° 25′ 12″
Příklad 2: 25′ 12
µ mikro µ µ
π Pi π π
ƒ funkční znak
(neplést s "integrální")
ƒ ƒ
ƒ
integrální
překročila nulu, prázdná sada
(neplést s "průměr")
průměr (nezaměňovat s přeškrtnutým latinským „o“)
ø Latinské „o“ diagonálně přeškrtnuté ø ø
Ø Latinské velké „O“ diagonálně přeškrtnuté Ø Ø
pracovní značka
sumační znak
radikál
(druhá odmocnina nebo x odmocnina)
úměrně
nekonečno
roh
ortogonální (kolmý)
podepsat "proto"
přibližně stejné
téměř stejné
ne rovné
identicky
menší nebo rovno
větší nebo rovno
logické AND
logické NEBO
znaménko plus v kruhu
(přímá částka)
znak násobení v kruhu
(křížový součin, šipka od pozorovatele)
ʘ tečka v kruhu
(šipka k pozorovateli)
ʘ

✵ ✵

Každý uživatel internetu, když se snažil nakonfigurovat jednu nebo druhou z jeho funkcí, alespoň jednou viděl na displeji slovo „Unicode“. Co to je, zjistíte přečtením tohoto článku.

Definice

Unicode je standard kódování znaků. Navrhla to nezisková organizace Unicode Inc. v roce 1991. Standard byl vyvinut s cílem kombinovat co nejvíce různých typů znaků v jednom dokumentu. Stránka, která je vytvořena na jejím základě, může obsahovat písmena a hieroglyfy z různých jazyků (od ruštiny po korejštinu) a matematické symboly. V tomto případě se všechny znaky v tomto kódování zobrazí bez problémů.

Důvody pro tvorbu

Kdysi, dávno před příchodem jednotného systému Unicode, se kódování vybíralo na základě preferencí autora dokumentu. Z tohoto důvodu bylo často nutné pro čtení jednoho dokumentu používat různé tabulky. Někdy se to muselo udělat vícekrát, což běžnému uživateli výrazně ztížilo život. Jak již bylo zmíněno, řešení tohoto problému navrhla v roce 1991 nezisková organizace Unicode Inc., která navrhla nový typ kódování znaků. Jeho cílem bylo sjednotit zastaralé a různorodé standardy. „Unicode“ je kódování, které umožnilo dosáhnout v té době nemyslitelného: vytvořit nástroj, který podporuje obrovské množství znaků. Výsledek předčil mnohá očekávání – objevily se dokumenty, které současně obsahovaly anglický i ruský text, latinské i matematické výrazy.

Vytvoření jednotného kódování ale předcházela potřeba vyřešit řadu problémů, které vyvstaly kvůli obrovské rozmanitosti standardů, které již v té době existovaly. Nejběžnější z nich:

  • elfské spisy neboli „krakozyabry“;
  • omezená znaková sada;
  • problém převodu kódování;
  • duplikace písem.

Krátký historický exkurz

Představte si, že jsou 80. léta. Počítačová technika ještě není tak rozšířená a má jiný vzhled než dnes. V té době byl každý OS svým způsobem jedinečný a každý nadšenec si ho upravoval pro konkrétní potřeby. Potřeba výměny informací se mění v dodatečné zpřesňování všeho. Pokus o čtení dokumentu vytvořeného pod jiným OS často zobrazí na obrazovce nesrozumitelnou sadu znaků a hry s kódováním začínají. Ne vždy je to možné udělat rychle a někdy lze potřebný dokument otevřít za šest měsíců nebo dokonce později. Lidé, kteří si často vyměňují informace, si sami vytvářejí převodní tabulky. A práce na nich odhaluje zajímavý detail: je třeba je vytvářet ve dvou směrech: „od mého k vašemu“ a zpět. Stroj pro něj nemůže provést banální inverzi výpočtů, zdroj je v pravém sloupci a výsledek je v levém, ale ne naopak. Pokud bylo potřeba v dokumentu použít nějaké speciální znaky, bylo třeba je nejprve přidat a poté také partnerovi vysvětlit, co musí udělat, aby se z těchto znaků nestaly „bláznivé věci“. A nezapomeňme, že pro každé kódování jsme museli vyvinout nebo implementovat vlastní fonty, což vedlo k vytvoření obrovského množství duplikátů v OS.

Představte si, že na stránce s písmy uvidíte 10 kusů stejných Times New Roman s malými poznámkami: pro UTF-8, UTF-16, ANSI, UCS-2. Chápete nyní, že vývoj univerzálního standardu byl naléhavou potřebou?

"Otcové stvořitelé"

Počátky Unicode lze vystopovat až do roku 1987, kdy Joe Becker ze společnosti Xerox spolu s Lee Collinsem a Markem Davisem z Applu zahájili výzkum praktického vytvoření univerzální znakové sady. V srpnu 1988 zveřejnil Joe Becker návrh 16bitového mezinárodního vícejazyčného kódovacího systému.

O několik měsíců později byla pracovní skupina Unicode rozšířena o Ken Whistlera a Mikea Kernegana z RLG, Glenna Wrighta ze Sun Microsystems a několik dalších, čímž byla dokončena přípravná práce na jediném standardu kódování.

Obecný popis

Unicode je založen na konceptu znaku. Tato definice se vztahuje k abstraktnímu jevu, který existuje ve specifickém typu písma a je realizován prostřednictvím grafémů (jejich „portrétů“). Každý znak je v Unicode specifikován jedinečným kódem patřícím do konkrétního bloku normy. Například grafém B je v anglické i ruské abecedě, ale v Unicode odpovídá 2 různým znakům. Je na ně aplikována transformace, to znamená, že každý z nich je popsán databázovým klíčem, sadou vlastností a celým jménem.

Výhody Unicode

Kódování Unicode se od ostatních současníků lišilo obrovskou zásobou znaků pro „šifrování“ znaků. Faktem je, že jeho předchůdci měli 8 bitů, to znamená, že podporovali 28 znaků, ale nový vývoj měl již 216 znaků, což byl obrovský krok vpřed. To umožnilo zakódovat téměř všechny existující a rozšířené abecedy.

S příchodem Unicode již nebylo potřeba používat konverzní tabulky: jako jediný standard jednoduše negoval jejich potřebu. Stejně tak „krakozyabry“ také upadly v zapomnění – jediný standard je znemožnil a také eliminoval potřebu vytvářet duplicitní písma.

Vývoj Unicode

Pokrok samozřejmě nestojí a od první prezentace uplynulo 25 let. Kódování Unicode si však ve světě tvrdošíjně drží své postavení. To bylo do značné míry možné díky skutečnosti, že se stal snadno implementovatelným a rozšířeným, což bylo uznáváno vývojáři proprietárního (placeného) a open source softwaru.

Neměli bychom však předpokládat, že dnes máme k dispozici stejné kódování Unicode jako před čtvrt stoletím. V tuto chvíli se jeho verze změnila na 5.x.x a počet kódovaných znaků se zvýšil na 231. Možnost používat větší zásobu znaků byla opuštěna, aby byla stále zachována podpora Unicode-16 (kódování, kde je max. počet byl omezen na 216). Od svého vzniku až do verze 2.0.0 zvýšil „standard Unicode“ počet znaků, které obsahoval, téměř dvakrát. Růst příležitostí pokračoval i v dalších letech. U verze 4.0.0 již bylo potřeba zvýšit samotný standard, což se podařilo. Unicode díky tomu získal podobu, ve které jej známe dnes.

Co dalšího je v Unicode?

Kromě obrovského, neustále rostoucího počtu symbolů má ještě jednu užitečnou funkci. Hovoříme o takzvané normalizaci. Místo procházení celého dokumentu znak po znaku a nahrazování příslušných ikon z vyhledávací tabulky se používá jeden ze stávajících normalizačních algoritmů. o čem to mluvíme?

Namísto plýtvání počítačovými prostředky na pravidelnou kontrolu stejného znaku, který může být podobný v různých abecedách, se používá speciální algoritmus. Umožňuje umístit podobné symboly do samostatného sloupce substituční tabulky a odkazovat na ně namísto opakované kontroly všech dat znovu a znovu.

Byly vyvinuty a implementovány čtyři takové algoritmy. V každé z nich probíhá transformace podle striktně definovaného principu, odlišného od ostatních, proto nelze žádnou z nich označit za nejúčinnější. Každý byl vyvinut pro specifické potřeby, byl implementován a úspěšně používán.

Šíření standardu

Za 25 let své historie se kódování Unicode stalo pravděpodobně nejrozšířenějším na světě. Tomuto standardu jsou přizpůsobeny i programy a webové stránky. O šíři použití svědčí fakt, že Unicode dnes používá více než 60 % internetových zdrojů.

Nyní víte, kdy se objevil standard Unicode. Také víte, co to je, a budete moci ocenit plný význam vynálezu vytvořeného skupinou specialistů Unicode Inc. před více než 25 lety.

Unicode

Materiál z Wikipedie – svobodné encyklopedie

Přejít na: navigace, vyhledávání

Unicode (nejčastěji) popř Unicode (angličtina Unicode) - standardní kódování znaků, což vám umožní reprezentovat znaky téměř všech písem jazyky.

Standard navržený v 1991 nezisková organizace "Unicode Consortium" ( angličtina Unicode Konsorcium, Unicode Inc. ). Použití tohoto standardu umožňuje kódovat velmi velký počet znaků z různých skriptů: Čínština může koexistovat v dokumentech Unicode hieroglyfy, matematické symboly, písmena Řecká abeceda, latinka A cyrilice, v tomto případě je přepínání zbytečné kódové stránky.

Standard se skládá ze dvou hlavních částí: univerzální znakové sady ( angličtina UCS, univerzální znaková sada) a rodina kódování ( angličtina. UTF, transformační formát Unicode). Univerzální znaková sada specifikuje shodu znaků jedna ku jedné kódy- prvky kódového prostoru představující nezáporná celá čísla. Rodina kódování definuje strojovou reprezentaci sekvence kódů UCS.

Kódy ve standardu Unicode jsou rozděleny do několika oblastí. Předvolby U+0000 až U+007F obsahují znaky vytáčení ASCII s odpovídajícími kódy. Dále jsou to oblasti znaků různých písem, interpunkčních znamének a technických symbolů. Některé kódy jsou vyhrazeny pro budoucí použití. Oblasti znaků s kódy od U+0400 do U+052F, od U+2DE0 do U+2DFF, od U+A640 do U+A69F jsou přiděleny pro znaky azbuky (viz. Cyrilice v Unicode).

    1 Předpoklady pro vytvoření a rozvoj Unicode

    2 verze Unicode

    3 Kódový prostor

    4 Kódovací systém

    5 Úprava symbolů

    6 Formy normalizace

    • 6.1 Příklady

    7 Obousměrné psaní

    8 Vybrané postavy

    9 ISO/IEC 10646

    10 Způsoby prezentace

    • 10.1 UTF-8

      10.2 Pořadí bajtů

      10.3 Unicode a tradiční kódování

      10.4 Implementace

    11 Metody zadávání

    • 11.1 Microsoft Windows

      11.2 Macintosh

      11.3 GNU/Linux

    12 Problémy s Unicode

    13 "Unicode" nebo "Unicode"?

    14 Viz také

Předpoklady pro vytvoření a vývoj Unicode

Ke konci 80. léta 20. století 8bitové znaky se staly standardem, přičemž existovalo mnoho různých 8bitových kódování a neustále se objevovala nová. To bylo vysvětleno jak neustálým rozšiřováním škály podporovaných jazyků, tak snahou vytvořit kódování, které je částečně kompatibilní s některými jinými (typickým příkladem je vznik alternativní kódování pro ruský jazyk, kvůli použití západních programů vytvořených pro kódování CP437). To vedlo k několika problémům:

    problém" krakozyabr"(zobrazení dokumentů v nesprávném kódování): dalo by se to vyřešit buď důslednou implementací metod pro specifikaci použitého kódování, nebo zavedením jediného kódování pro všechny.

    Problém s omezením znakové sady: lze to vyřešit buď přepínáním písem v dokumentu, nebo zavedením „širokého“ kódování. Přepínání písem je již dlouho praktikováno textové procesory a byly často používány fonty s nestandardním kódováním, tzv „dingbat fonts“ - v důsledku toho se při pokusu o přenos dokumentu do jiného systému všechny nestandardní znaky změnily na nesmysl.

    Problém převodu jednoho kódování na druhé: mohl být vyřešen buď kompilací převodních tabulek pro každý pár kódování, nebo použitím přechodného převodu na třetí kódování, které zahrnovalo všechny znaky všech kódování.

    Problém duplikace písem: tradičně mělo každé kódování své vlastní písmo, i když se tato kódování částečně (nebo úplně) shodovala v sadě znaků: tento problém by bylo možné vyřešit vytvořením „velkých“ písem, ze kterých by znaky potřebné pro pak byla zvolena daná kódování - to však vyžaduje vytvoření jednotného registru symbolů pro určení, co čemu odpovídá.

Bylo považováno za nutné vytvořit jediné „široké“ kódování. Kódování s proměnnou šířkou, široce používané ve východní Asii, bylo považováno za příliš obtížné, a proto bylo rozhodnuto použít znaky s pevnou šířkou. Používání 32bitových znaků se zdálo příliš nehospodárné, proto bylo rozhodnuto použít 16bitové znaky.

První verze Unicode tedy byla pevným znakovým kódováním 16 bitů, takže celkový počet kódů byl 2 16 (65 536). Odtud pochází praxe označování znaků čtyřmi hexadecimálními číslicemi (například U+04F0). Současně bylo plánováno kódování ne všech existujících znaků v Unicode, ale pouze těch, které jsou nezbytné v každodenním používání. Vzácně používané symboly měly být umístěny v „oblasti soukromého použití“, která původně zabírala kódy U+D800...U+F8FF. Aby bylo možné použít Unicode také jako mezičlánek při převodu různých kódování do sebe, zahrnoval všechny znaky zastoupené ve všech nejznámějších kódováních.

Později však bylo rozhodnuto zakódovat všechny znaky a tím výrazně rozšířit oblast kódu. Ve stejné době se na znakové kódy začalo nahlížet nikoli jako na 16bitové hodnoty, ale jako na abstraktní čísla, která lze v počítači znázornit mnoha různými způsoby (viz. Prezentační metody).

Protože v řadě počítačových systémů (např. Windows NT ) již byly jako výchozí kódování použity pevné 16bitové znaky, bylo rozhodnuto zakódovat všechny nejdůležitější znaky pouze v rámci prvních 65 536 pozic (tzv. angličtina základní vícejazyčný rovina, BMP). Zbytek místa se používá pro "znaky navíc" ( angličtina doplňkový postavy): systémy psaní zaniklých nebo velmi zřídka používaných jazyků čínština hieroglyfy, matematické a hudební symboly.

Aby byl kompatibilní se staršími 16bitovými systémy, byl vynalezen systém UTF-16, kde prvních 65 536 pozic, s výjimkou pozic v rozsahu U+D800...U+DFFF, je reprezentováno přímo jako 16bitová čísla a zbytek je reprezentován jako „náhradní páry“ (první prvek páru z rozsah U+D800...U+DBFF , druhý prvek dvojice z oblasti U+DC00...U+DFFF). Pro náhradní páry byla použita část kódového prostoru (2048 pozic) dříve vyhrazená pro „znaky pro soukromé použití“.

Protože UTF-16 může zobrazit pouze 2 20 + 2 16 −2048 (1 112 064) znaků, bylo toto číslo zvoleno jako konečná hodnota prostoru kódu Unicode.

Přestože oblast kódu Unicode byla rozšířena za 2 16 již ve verzi 2.0, první znaky v oblasti „top“ byly umístěny až ve verzi 3.1.

Role tohoto kódování ve webovém sektoru neustále roste, na začátku roku 2010 byl podíl webů využívajících Unicode cca 50 %.

Unicode verze

Jak se tabulka znaků systému Unicode mění a doplňuje a jsou vydávány nové verze tohoto systému – a tato práce pokračuje, protože systém Unicode zpočátku zahrnoval pouze rovinu 0 – dvoubajtové kódy – jsou také vydávány nové dokumenty. ISO. Systém Unicode existuje celkem v následujících verzích:

    1.1 (splňuje normu ISO/IEC 10646-1: 1993 ), standard 1991-1995.

    2.0, 2.1 (stejná norma ISO/IEC 10646-1:1993 plus dodatky: „Dodatky“ 1 až 7 a „Technické opravy“ 1 a 2), norma z roku 1996.

    3.0 (norma ISO/IEC 10646-1:2000), norma 2000.

    3.1 (normy ISO/IEC 10646-1:2000 a ISO/IEC 10646-2:2001), norma 2001.

    3.2 standard 2002.

    4.0, standardní 2003 .

    4.01, standardní 2004 .

    standard 4.1 2005 .

    5.0, standardní 2006 .

    standard 5.1 2008 .

    standard 5.2 2009 .

    6.0, standardní 2010 .

    standard 6.1 2012 .

    standard 6.2 2012 .

Kódový prostor

Ačkoli zápisy UTF-8 a UTF-32 umožňují zakódovat až 2,31 (2,147,483,648) kódových pozic, bylo rozhodnuto použít pouze 1,112,064 pro kompatibilitu s UTF-16. I to je však v současnosti více než dost – verze 6.0 využívá necelých 110 000 kódových pozic (109 242 grafických a 273 dalších symbolů).

Kódový prostor je rozdělen na 17 letadla 2 16 (65536) znaků každý. Základní rovina se nazývá základní, obsahuje symboly nejpoužívanějších skriptů. První rovina se používá hlavně pro historické spisy, druhá - pro zřídka používané hieroglyfy KKYA, třetí je vyhrazena pro archaické čínské znaky . Letadla 15 a 16 jsou určena pro soukromé použití.

K označení znaků Unicode se používá zápis jako „U+“. xxxx"(pro kódy 0...FFFF), nebo "U+ xxxxx"(pro kódy 10000...FFFFF), nebo "U+ xxxxxx"(pro kódy 100000...10FFFF), kde xxx - hexadecimálníčísla. Například znak "I" (U+044F) má kód 044F 16 = 1103 10 .

Systém kódování

Univerzální kódovací systém (Unicode) je sada grafických znaků a způsob, jak je zakódovat počítač zpracování textových dat.

Grafické symboly jsou symboly, které mají viditelný obrázek. Grafické znaky jsou kontrastovány s řídicími znaky a formátovacími znaky.

Grafické symboly zahrnují následující skupiny:

  • interpunkční znaménka;

    speciální znaky ( matematický, technický, ideogramy atd.);

    oddělovače.

Unicode je systém pro lineární reprezentaci textu. Znaky, které mají další prvky horního nebo dolního indexu, mohou být reprezentovány jako sekvence kódů vytvořených podle určitých pravidel (složený znak) nebo jako jeden znak (monolitická varianta, předem složený znak).

Úprava postav

Znázornění symbolu „И“ (U+0419) jako základního znaku „И“ (U+0418) a modifikačního znaku „ ̆“ (U+0306)

Grafické znaky se v Unicode dělí na rozšířené a nerozšířené (bez šířky). Nerozšířené znaky při zobrazení nezabírají místo čára. Patří mezi ně zejména akcenty a další diakritika. Rozšířené i nerozšířené symboly mají své vlastní kódy. Rozšířené symboly se jinak nazývají základní symboly ( angličtina báze postavy), a nerozšířené - upravující ( angličtina kombinování postavy); Navíc se posledně jmenovaní nemohou setkat nezávisle. Například znak "á" může být reprezentován jako posloupnost základního znaku "a" (U+0061) a modifikačního znaku " ́" (U+0301), nebo jako monolitický znak "á" (U+ 00C1).

Speciálním typem modifikujících znaků jsou selektory variant stylu ( angličtina variace selektory). Ovlivňují pouze ty symboly, pro které jsou takové varianty definovány. Ve verzi 5.0 jsou definovány možnosti stylu pro řadu matematických symbolů, pro tradiční symboly Mongolská abeceda a pro postavy Mongolský čtvercový dopis.

Formy normalizace

Vzhledem k tomu, že stejné znaky mohou být reprezentovány různými kódy, což někdy znesnadňuje zpracování, existují normalizační procesy určené k redukci textu do určité standardní formy.

Standard Unicode definuje 4 formy normalizace textu:

    Normalizační forma D (NFD) je kanonický rozklad. V procesu převedení textu do této formy jsou všechny složené znaky rekurzivně nahrazeny několika složenými v souladu s rozkladovými tabulkami.

    Normalizační forma C (NFC) je kanonický rozklad následovaný kanonickým složením. Nejprve je text redukován do formy D, poté je provedena kanonická kompozice - text je zpracováván od začátku do konce a jsou dodržována následující pravidla:

    • Symbol S je počáteční, pokud má modifikační třídu nula ve znakové základně Unicode.

      V jakékoli sekvenci znaků začínajících počátečním znakem S je znak C blokován od S tehdy a pouze tehdy, když mezi S a C existuje jakýkoli znak B, který je buď počátečním znakem nebo má stejnou nebo vyšší třídu modifikace než C. To toto pravidlo platí pouze pro řetězce, které prošly kanonickým rozkladem.

      Primární Složený je znak, který má kanonickou dekompozici ve znakové základně Unicode (nebo kanonickou dekompozici pro hangul a není součástí seznam výjimek).

      Znak X může být primárně složen se znakem Y tehdy a pouze tehdy, pokud existuje primární složený Z, který je kanonicky ekvivalentní posloupnosti. .

      Pokud další symbol C není blokován posledním nalezeným počátečním základním symbolem L a lze jej s ním úspěšně primárně zkombinovat, pak je L nahrazeno kompozitem L-C a C je odstraněno.

    Normalizační forma KD (NFKD) je kompatibilní rozklad. Při odevzdání do této formy jsou všechny základní znaky nahrazeny pomocí jak kanonických dekompozičních map Unicode, tak kompatibilních dekompozičních map a výsledek je pak uveden do kanonického pořadí.

    Normalizační forma KC (NFKC) - kompatibilní rozklad následovaný kanonický složení.

Pojmy „složení“ a „rozklad“ znamenají spojení nebo rozklad symbolů na jejich součásti.

Příklady

Zdrojový text

\u0410, \u0401, \u0419

\u0410, \u0415\u0308, \u0418\u0306

\u0410, \u0401, \u0419

Obousměrné psaní

Standard Unicode podporuje jazyky psané v obou směrech psaní zleva doprava ( angličtina vlevo- na- právo, LTR) a psaním zprava doleva ( angličtina právo- na- vlevo, RTL) - Například arabština A židovský dopis. V obou případech jsou znaky uloženy v "přirozeném" pořadí; jejich zobrazení zohledňující požadovaný směr psaní zajišťuje aplikace.

Unicode navíc podporuje kombinované texty, které kombinují fragmenty s různými směry psaní. Tato funkce se nazývá obousměrnost (angličtina obousměrný text, BiDi). Některé lehké vykreslovače textu (například ty v mobilních telefonech) mohou podporovat Unicode, ale nepodporují obousměrnost. Všechny znaky Unicode jsou rozděleny do několika kategorií: znaky psané zleva doprava, znaky psané zprava doleva a znaky psané libovolným směrem. Symboly poslední kategorie (většinou interpunkční znaménka), když se zobrazí, vezměte směr okolního textu.

Vybrané postavy

Hlavní článek: Znaky reprezentované v Unicode

Schéma referenční roviny Unicode, viz popis

Unicode zahrnuje téměř všechny moderní psaní včetně:

    arabština,

    arménský,

    bengálský,

    barmský,

    hlaholice,

    řecký,

    gruzínský,

    dévanágarí,

    židovský,

    cyrilice,

    čínština(Čínské znaky se aktivně používají v japonský, a také docela zřídka v korejština),

    koptský,

    khmerské,

    latinský,

    tamilština,

    korejština (hangul),

    Cherokee,

    etiopský,

    japonský(což zahrnuje kromě čínské znaky také slabičná abeceda),

a další.

Mnoho historických spisů bylo přidáno pro akademické účely, včetně: germánské runy, starověké turecké runy, starověké řečtiny, Egyptské hieroglyfy, klínové písmo, Mayské psaní, Etruská abeceda.

Unicode poskytuje širokou škálu matematický A hudební postavy, stejně jako piktogramy.

Unicode však obecně nezahrnuje loga společností a produktů, i když je lze nalézt ve fontech (např. Jablko v kódování MacRoman(0xF0) nebo logo Windows ve fontu Wingdings (0xFF)). V písmech Unicode by loga měla být umístěna pouze v oblasti vlastních znaků.

ISO/IEC 10646

Unicode Consortium úzce spolupracuje s pracovní skupinou ISO/IEC/JTC1/SC2/WG2, která vyvíjí mezinárodní standard 10646 ( ISO/IEC 10646). Existuje synchronizace mezi standardem Unicode a ISO/IEC 10646, ačkoli každý standard používá svou vlastní terminologii a systém dokumentace.

Spolupráce mezi Unicode Consortium a Mezinárodní organizací pro standardizaci ( angličtina Mezinárodní organizace pro normalizaci, ISO) začalo v 1991 rok. V 1993 rok ISO vydala standard DIS 10646.1. Pro synchronizaci s ním konsorcium schválilo standard Unicode verze 1.1, který obsahoval další znaky z DIS 10646.1. V důsledku toho se významy kódovaných znaků v Unicode 1.1 a DIS 10646.1 zcela shodovaly.

Následně spolupráce mezi oběma organizacemi pokračovala. V 2000 Standard Unicode 3.0 byl synchronizován s ISO/IEC 10646-1:2000. Nadcházející třetí verze ISO/IEC 10646 bude synchronizována s Unicode 4.0. Možná budou tyto specifikace dokonce zveřejněny jako jednotný standard.

Podobně jako formáty UTF-16 a UTF-32 ve standardu Unicode má standard ISO/IEC 10646 také dvě základní formy kódování znaků: UCS-2 (2 bajty na znak, podobně jako UTF-16) a UCS-4 (4 bajty na znak, podobně jako UTF-32). UCS znamená univerzální víceoktet(vícebajtové) kódovaná znaková sada (angličtina univerzální násobek- oktet kódované charakter soubor). UCS-2 lze považovat za podmnožinu UTF-16 (UTF-16 bez náhradních párů) a UCS-4 je synonymem pro UTF-32.

Prezentační metody

Unicode má několik forem reprezentace ( angličtina Transformační formát Unicode, UTF): UTF-8, UTF-16(UTF-16BE, UTF-16LE) a UTF-32 (UTF-32BE, UTF-32LE). Forma reprezentace UTF-7 byla také vyvinuta pro přenos přes sedmibitové kanály, ale kvůli nekompatibilitě s ASCII není rozšířený a není součástí standardu. 1. dubna 2005 byly navrženy dvě komické formy reprezentace: UTF-9 a UTF-18 ( RFC 4042).

V Microsoft Windows NT a systémy na něm založené Windows 2000 A Windows XP většinou použitý UTF-16LE formulář. V UNIX-podobný operační systémy GNU/Linux, BSD A Mac OS X přijatelná forma je UTF-8 pro soubory a UTF-32 nebo UTF-8 pro zpracování znaků BERAN.

Punycode- jiná forma kódování sekvencí znaků Unicode do tzv. ACE sekvencí, které se skládají pouze z alfanumerických znaků, jak je povoleno v názvech domén.

Hlavní článek: UTF-8

UTF-8 je reprezentace Unicode, která poskytuje nejlepší kompatibilitu se staršími systémy, které používaly 8bitové znaky. Text sestávající pouze ze znaků očíslovaných méně než 128 je převeden na prostý text, když je napsán v UTF-8 ASCII. Naopak v UTF-8 textu libovolné byte s hodnotou menší než 128 představuje znak ASCII se stejným kódem. Zbývající znaky Unicode jsou reprezentovány jako sekvence o délce od 2 do 6 bajtů (ve skutečnosti pouze do 4 bajtů, protože Unicode nemá znaky s kódem větším než 10FFFF a v budoucnu se neplánuje jejich zavedení ), ve kterém je první bajt vždy 11xxxxxx a zbytek - 10xxxxxx.

Byl vynalezen formát UTF-8 2. září 1992 Ken Thompson A Rob Pike a implementován v Plán 9 . Nyní je standard UTF-8 oficiálně zakotven v dokumentech RFC 3629 a ISO/IEC 10646 příloha D.

Znaky UTF-8 jsou odvozeny z Unicode následovně:

0x00000000 – 0x0000007F: 0xxxxxxx

0x00000080 – 0x000007FF: 110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Teoreticky možné, ale také nezahrnuté ve standardu:

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Ačkoli UTF-8 umožňuje zadat stejný znak několika způsoby, správný je pouze ten nejkratší. Jiné formuláře by měly být z bezpečnostních důvodů odmítnuty.

Pořadí bajtů

V datovém toku UTF-16 lze horní bajt zapsat buď před dolní bajt ( angličtina UTF-16 little-endian), nebo po nezletilém ( angličtina. UTF-16 big-endian). Podobně existují dvě možnosti pro čtyřbajtové kódování – UTF-32LE a UTF-32BE.

Pro určení formátu reprezentace Unicode se na začátek textového souboru zapíše následující: podpis- znak U+FEFF (mezera s nulovou šířkou), také nazývaný značka pořadí bajtů (angličtina byte objednávka označit, kusovník ). To umožňuje rozlišovat mezi UTF-16LE a UTF-16BE, protože znak U+FFFE neexistuje. Tato metoda se také někdy používá k označení formátu UTF-8, ačkoli koncept pořadí bajtů se na tento formát nevztahuje. Soubory podle této konvence začínají následujícími bajtovými sekvencemi:

Bohužel tato metoda spolehlivě nerozlišuje mezi UTF-16LE a UTF-32LE, protože znak U+0000 je povolen Unicode (ačkoli skutečný text jím začíná jen zřídka).

Soubory s kódováním UTF-16 a UTF-32, které neobsahují kusovník, musí být v pořadí bajtů big-endian ( unicode.org).

Unicode a tradiční kódování

Zavedení Unicode vedlo ke změně přístupu k tradičnímu 8bitovému kódování. Pokud dříve bylo kódování určeno písmem, nyní je určeno tabulkou shody mezi daným kódováním a Unicode. Ve skutečnosti se 8bitové kódování stalo formou reprezentace podmnožiny Unicode. Díky tomu bylo mnohem snazší vytvářet programy, které potřebují pracovat s mnoha různými kódováními: nyní, abyste přidali podporu pro další kódování, stačí přidat další konverzní tabulku Unicode.

Mnoho datových formátů navíc umožňuje vložit libovolné znaky Unicode, i když je dokument napsán ve starém 8bitovém kódování. Například v HTML můžete použít kódy s ampersandem.

Implementace

Většina moderních operačních systémů poskytuje určitý stupeň podpory Unicode.

V operačních systémech rodiny Windows NT Pro interní reprezentaci názvů souborů a dalších systémových řetězců se používá dvoubajtové kódování UTF-16LE. Systémová volání, která přijímají řetězcové parametry, přicházejí v jednobajtových a dvoubajtových variantách. Další podrobnosti naleznete v článku. .

UNIX-podobné operační systémy, včetně GNU/Linux, BSD, Mac OS X, použijte kódování UTF-8 k reprezentaci Unicode. Většina programů může zacházet s UTF-8, jako by šlo o tradiční jednobajtové kódování, bez ohledu na skutečnost, že znak je reprezentován jako několik po sobě jdoucích bajtů. Pro řešení jednotlivých znaků se řetězce obvykle překódují na UCS-4, takže každý znak odpovídá strojové slovo.

Jednou z prvních úspěšných komerčních implementací Unicode bylo programovací prostředí Jáva. Zásadně opustila 8bitovou reprezentaci znaků ve prospěch 16bitové. Toto řešení zvýšilo spotřebu paměti, ale umožnilo nám vrátit důležitou abstrakci do programování: libovolný jediný znak (typ char). Zejména programátor mohl pracovat s řetězcem, jako by to bylo jednoduché pole. Bohužel úspěch nebyl konečný, Unicode přerostlo 16bitový limit a od verze J2SE 5.0 začal libovolný znak opět zabírat proměnný počet paměťových jednotek - jeden nebo dva znaky (viz. náhradní pár).

Většina programovacích jazyků nyní podporuje řetězce Unicode, i když jejich reprezentace se může lišit v závislosti na implementaci.

Metody zadávání

Protože žádný rozložení klávesnice nelze povolit zadání všech znaků Unicode najednou, od operační systémy A aplikační programy Je vyžadována podpora alternativních metod pro zadávání libovolných znaků Unicode.

Microsoft Windows

Hlavní článek: Unicode v operačních systémech Microsoft

Počínaje od Windows 2000, nástroj Charmap.exe zobrazuje všechny znaky v OS a umožňuje vám je zkopírovat schránka. Podobná tabulka je dostupná např. v Microsoft Word.

Někdy se dá vytočit hexadecimální kód, stiskněte Alt+X a kód bude nahrazen odpovídajícím znakem, například in WordPad, Microsoft Word. V editorech Alt+X také provádí obrácený převod.

V mnoha programech pro MS Windows, abyste získali znak Unicode, musíte stisknout klávesu Alt a zadat desetinnou hodnotu kódu znaku na numerické klávesnici. Například kombinace Alt+0171 (“) a Alt+0187 (“”) budou užitečné při psaní textů v azbuce. Zajímavé jsou také kombinace Alt+0133 (…) a Alt+0151 (-).

Macintosh

V MacOS 8.5 a novější verze podporují metodu vstupu nazvanou "Unicode Hex Input". Zatímco držíte klávesu Option, musíte zadat čtyřmístný hexadecimální kód požadovaného znaku. Tato metoda umožňuje zadávat znaky s kódy většími než U+FFFF pomocí náhradních párů; tyto páry budou operačním systémem automaticky nahrazeny jednotlivými znaky. Před použitím musí být tato metoda zadávání aktivována v příslušné části systémových nastavení a poté vybrána jako aktuální metoda zadávání v nabídce klávesnice.

Počínaje od Mac OS X 10.2 je k dispozici také aplikace „Paleta znaků“, která umožňuje vybrat znaky z tabulky, ve které můžete vybrat znaky z konkrétního bloku nebo znaky podporované konkrétním písmem.

GNU/Linux

V GNOME K dispozici je také nástroj „Tabulka symbolů“, který umožňuje zobrazit symboly určitého bloku nebo systému psaní a poskytuje možnost vyhledávat podle názvu nebo popisu symbolu. Když je znám kód požadovaného znaku, lze jej zadat v souladu s normou ISO 14755: podržte klávesy Ctrl + ⇧ Posun zadejte hexadecimální kód (od některých verzí GTK+ musí zadání kódu předcházet stisknutí klávesy "U"). Zadaný hexadecimální kód může být dlouhý až 32 bitů, což vám umožní zadat jakýkoli znak Unicode bez použití náhradních párů.




Nahoru