UTF-32

UTF-32 (taktéž UCS-4) je protokol pro kódování Unicode znaků. Tento protokol kóduje každý znak (kód nebo kódový bod sady Unicode) právě 32 bity (čtyřmi bajty). Tím vzniká přímá reprezentace znaku. Ostatní běžná kódování Unicode, používají pro zakódování jednoho znaku proměnný počet bitů.

Výhody a nevýhody

Hlavní výhodou UTF-32 oproti kódováním s proměnnou délkou je to, že tyto Unicode kódy jsou přímo indexovatelné. Kterýkoli znak (kód) v řetězci je dostupný ve stejném čase. Kódování s proměnlivou délkou znaku vyžadují pro nalezení n-tého znaku sekvenční přístup. Díky tomu lze s pomocí UTF-32 poměrně jednoduše použít algoritmy pracující s kódem ASCII, a odvozenýmí národními 8bitovými kódy kde je také každý znak reprezentován konstantním počtem bitů (v daném případě osmi bity).

Hlavní nevýhodou UTF-32 je neefiktivita nakládání s pamětí, zakódování každého znaku spotřebuje 4 bajty. Vzhledem k tomu, že výskyt ne-ASCII znaků v českých textech je vzácný (asijské, africké, ruské znaky apod.), český text zapsaný v UTF-32 spotřebuje téměř dvakrát více paměti než UTF-16 a téměř čtyřikrát více paměti než při kódování UTF-8.

Další nevýhodou je, že pořadí bajtů ve znaku při ukládání řetězců na paměťová média nebo při jejich přenosu je dané architekturou systému, což může vést k nekompatibilitě při zpracování textů v různých operačních systémech, procesorových architekturách, nebo v různých počítačových jazycích. Tuto slabinu sdílejí téměř všechna kódování sady unicode, s výjimkou UTF-8 a GB 18030.

UTF-32 je výhodnou volbou při zpracování textových řetězců, ale je nevhodný pro ukládání řetězců na paměťová média, nebo pro práci s rozsáhlými poli řetězců v operační paměti počítače.

Historie

Původní standard ISO 10646 definuje 31bitové kódování nazývané UCS-4, v kterém je každý znak reprezentován 32bitovým číslem. Toto číslo může nabývat hodnoty mezi 0 až hexadeximálně 7FFFFFFF.

Protože nyní norma připouští použití 17 oblastí z nichž každá obsahuje 216 kódových bodů, povolené hodnoty kódových bodů jsou 0 až hexadecimálně 10FFFF. UTF-32 je proto podmnožinou UCS-4.

Použití

Kódování UTF-32 se často používá při interním zpracování řetězců API. Různé systémy API a jazyky kvůli úspoře paměti nebo z historických důvodů používají i při interním zpracování řetězců odlišná kódování.

V Unixových operačních systémech se řetězci s kódováním UTF-32 občas setkáme kvůli tomu, že typ wchar_t (datový typ používaný pro ukládání znaků ve standardních knihovnách jazyka C) je zde implementován jako 32bitový. Knihovny operačních systémů rodiny Microsoft Windows používají 16bitový wchar_t, pracují tedy v kódování UTF-16.

Nižší verze programovacího jazyka Python (tj. do verze 3.2) mohou vnitřně pracovat s kódováním UTF-16. Od verze 3.3 využívá Python pro zpracování řetězců výhradně kód UTF-32. Programovací jazyk Seed7 kóduje všechny znaky i řetězce pomocí UTF-32.

Reference

V tomto článku byl použit překlad textu z článku UTF-32 na anglické Wikipedii.