Vysvětlení kódování znaků Unicode

Aby počítač mohl ukládat text a čísla, kterým lidé rozumí, musí existovat kód, který se transformuje postavy na čísla. Norma Unicode definuje takový kód pomocí kódování znaků.

Kódování znaků příčiny je tak důležité, aby každé zařízení mohlo zobrazit stejné informace. Vlastní schéma kódování znaků může na jednom počítači fungovat skvěle, ale problémy se objeví, pokud pošlete stejný text někomu jinému. Nebude vědět, o čem to mluvíte, pokud nerozumí také schématu kódování.

Kódování znaků

Veškeré kódování znaků dělá každému číslu, které lze použít, přiřazené číslo. Nyní můžete vytvořit kódování znaků.

Mohl bych například říci, že dopis A se stává číslem 13, a = 14, 1 = 33, # = 123 atd.

Zde přicházejí normy pro celé odvětví. Pokud celé odvětví počítačů používá stejné schéma kódování znaků, každý počítač může zobrazit stejné znaky.

Co je Unicode?

ASCII (americký standardní kód pro výměnu informací) se stal prvním rozšířeným schématem kódování. Je však omezen na 128 definic znaků. To je v pořádku pro nejběžnější anglické znaky, čísla a interpunkci, ale pro zbytek světa je to trochu omezující.

instagram viewer

Zbytek světa přirozeně chce pro své postavy stejné schéma kódování. Na chvíli, v závislosti na tom, kde jste byli, se však pro stejný kód ASCII mohl zobrazit jiný znak.

Nakonec ostatní části světa začaly vytvářet vlastní schémata kódování a věci začaly být trochu matoucí. Nejen, že byly kódovací schémata různých délek, programy potřebné k tomu, aby zjistily, které kódovací schéma měly použít.

Ukázalo se, že je zapotřebí nové schéma kódování znaků, tedy v době, kdy byl vytvořen standard Unicode. Cílem Unicode je sjednotit všechna různá schémata kódování, aby bylo možné co nejvíce omezit záměnu mezi počítači.

V těchto dnech standard Unicode definuje hodnoty pro více než 128 000 znaků a je vidět na Konsorcium Unicode. Má několik forem kódování znaků:

  • UTF-8: K kódování anglických znaků používá pouze jeden bajt (8 bitů). Může použít sekvenci bajtů pro kódování dalších znaků. UTF-8 je široce používán v e-mailových systémech a na internetu.
  • UTF-16: K zakódování nejčastěji používaných znaků používá dva bajty (16 bitů). V případě potřeby mohou být další znaky představovány dvojicí 16bitových čísel.
  • UTF-32: K kódování znaků používá čtyři bajty (32 bitů). Ukázalo se, že s rostoucím standardem Unicode je 16bitové číslo příliš malé na to, aby reprezentovalo všechny znaky. UTF-32 je schopen reprezentovat každý znak Unicode jako jedno číslo.

Poznámka: UTF znamená transformační jednotku Unicode.

Kódové body

Kódový bod je hodnota, kterou je znak dán standardem Unicode. Hodnoty podle Unicode jsou zapsány jako hexadecimální čísla a mají předponu U +.

Například pro zakódování postav, na které jsme se podívali dříve:

  • A je U + 0041
  • A je U + 0061
  • 1 je U + 0031
  • # je U + 0023

Tyto kódové body jsou rozděleny do 17 různých sekcí nazývaných roviny, které jsou označeny čísly 0 až 16. Každá rovina má 65 536 kódových bodů. První rovina, 0, obsahuje nejčastěji používané znaky a je známá jako základní vícejazyčné letadlo (BMP).

Kódové jednotky

Schémata kódování jsou tvořena kódovými jednotkami, které se používají k vytvoření indexu, kde je znak umístěn v rovině.

Jako příklad zvažte UTF-16. Každé 16bitové číslo je kódová jednotka. Kódové jednotky lze transformovat do kódových bodů. Například symbol ploché poznámky ♭ má kódový bod U + 1D160 a žije ve druhé rovině standardu Unicode (Supplementary Ideographic Plane). Bylo by kódováno pomocí kombinace 16bitových kódových jednotek U + D834 a U + DD60.

Pro BMP jsou hodnoty kódových bodů a kódových jednotek identické. To umožňuje zástupce UTF-16, který šetří spoustu úložného prostoru. K reprezentaci těchto znaků stačí použít jedno 16bitové číslo.

Jak Java používá Unicode?

Jáva byl vytvořen v době, kdy standard Unicode měl hodnoty definované pro mnohem menší sadu znaků. Tehdy se cítilo, že 16 bitů by bylo více než dostatečných pro zakódování všech znaků, které by byly kdy potřeba. S ohledem na to byla Java navržena pro použití UTF-16. Datový typ char byl původně používán k reprezentaci 16bitového kódového bodu Unicode.

Od Java SE v5.0 představuje znak znakovou jednotku. To představuje malý rozdíl pro reprezentaci znaků, které jsou v základní vícejazyčné rovině, protože hodnota kódové jednotky je stejná jako kódový bod. To však znamená, že pro postavy na ostatních letadlech jsou potřeba dvě znaky.

Důležité je zapamatovat si, že jediný datový typ znaku již nemůže představovat všechny znaky Unicode.