UTF-32

UTF-32 ( anglicky  Unicode Transformation Format ) nebo UCS-4 (univerzální znaková sada, angl.  Universal Character Set ) v informatice  je jedním ze způsobů kódování znaků Unicode , přičemž ke kódování jakéhokoli znaku se používá přesně 32 bitů. Zbývající kódování, UTF-8 a UTF-16, používají k reprezentaci znaků proměnný počet bajtů. Znak UTF-32 je přímou reprezentací jeho pozice v kódu ( bod kódu).

Hlavní výhodou UTF-32 oproti kódování s proměnnou délkou je to, že znaky Unicode jsou přímo indexovatelné. Získání pozice n-tého kódu je operace, která trvá stejnou dobu. Naproti tomu kódy s proměnnou délkou vyžadují sekvenční přístup k n-té kódové pozici. To usnadňuje nahrazení znaků v řetězcích UTF-32 použitím celého čísla jako indexu, jak se to obvykle dělá u řetězců ASCII .

Hlavní nevýhodou UTF-32 je jeho neefektivní využití prostoru, protože k uložení znaku se používají čtyři bajty. Znaky ležící mimo nulovou (základní) rovinu kódového prostoru se ve většině textů používají jen zřídka. Zdvojnásobení místa obsazeného řetězci v UTF-32 ve srovnání s UTF-16 proto není opodstatněné.

I když je použití pevného počtu bajtů na znak pohodlné, není to tak dobré, jak to zní. Zkrácení řetězce se implementuje snadněji než UTF-8 a UTF-16. To však neurychluje nalezení konkrétního offsetu v řetězci, protože offset lze vypočítat i pro kódování s pevnou velikostí. To neusnadňuje výpočet zobrazené šířky řádku, s výjimkou omezeného počtu případů, protože i znak "pevné šířky" lze získat kombinací běžného znaku s modifikátorem, který nemá žádnou šířku. Například písmeno „y“ může být odvozeno z písmene „i“ a diakritického znaménka „ háknout přes písmeno “ . Kombinace takových znaků znamená, že textové editory nemohou považovat 32bitový kód za jednotku úprav. Editoři, kteří jsou omezeni na práci s jazyky zleva doprava a předem složenými znaky , mohou používat znaky s pevnou velikostí .  Ale takové editory pravděpodobně nebudou podporovat znaky mimo nulovou (základní) rovinu kódového prostoru a pravděpodobně nebudou fungovat stejně dobře se znaky UTF-16.

Historie

Norma ISO 10646 definuje 31bitovou formu kódování nazvanou UCS-4, ve které je každý kódovaný znak reprezentován 32bitovou kódovou hodnotou v kódovém prostoru čísel od 0 do 7FFFFFFFF.

Protože se skutečně používá pouze 17 rovin, kódy všech znaků mají hodnoty od 0 do 0x10FFFF. UTF-32 je podmnožinou UCS-4, která používá pouze tento rozsah. Protože dokument JTC1/SC2/WG2 uvádí, že všechna budoucí přiřazení znaků budou omezena na nulovou (základní) rovinu kódového prostoru nebo prvních 14 dalších rovin, UTF-32 bude schopno reprezentovat všechny znaky Unicode. V souladu s tím jsou UCS-4 a UTF-32 v současnosti totožné, kromě toho, že standard UTF-32 má další sémantiku Unicode.

Použití

UTF-32 se primárně nepoužívá ve znakových řetězcích, ale v interních rozhraních API , kde jsou data jeden kódový bod nebo glyf . Například při kreslení textu se v posledním kroku vytvoří seznam struktur, z nichž každá obsahuje pozice x a y, atributy a jeden znak UTF-32, který identifikuje glyf k kreslení. Často „nepoužitých“ 11 bitů každého 32bitového znaku uchovává nadbytečné informace.

UTF-32 se používá k ukládání řetězců v Unixu , když je typ wchar_t definován jako 32bitový. Programy Pythonu do 3.2 včetně mohly být zkompilovány tak, aby používaly UTF-32 místo UTF-16. Od verze 3.3 byla odstraněna podpora pro UTF-16 a řetězce jsou uloženy v UTF-32, ale úvodní nuly jsou optimalizovány, pokud se nepoužívají. V systému Windows , kde je typ wchar_t 16 bitů, se řetězce UTF-32 téměř nikdy nepoužívají.

Bez použití UTF-32 v HTML5

Standard HTML5 uvádí, že "Autoři by neměli používat UTF-32, protože kódovací algoritmy popsané v této specifikaci jej nerozlišují od UTF-16."

Odkazy