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.
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.
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í.
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."
Kódování znaků | |
---|---|
Historická kódování | doplňková komp. semafor (Makarov) morse Bodo MTK-2 komp. 6-bit SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
moderní 8bitová reprezentace | symboly ASCII non-ASCII 8bitové kódové stránky cyrilice KOI-8 Základní kódování MacCyrillic ISO 8859 1 (lat.) 2 3 čtyři 5 (kir.) 6 7 osm 9 deset jedenáct 12 13 čtrnáct 15 (€) 16 Okna 1250 1251 (Kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM a DOS 437 850 852 855 866 "alternativní" MIC |
Vícebajtové | tradiční DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 seznam postav cyrilice |
uživatelské rozhraní rozložení klávesnice národní prostředí překlad řádků písmo přepis vlastní písma utility iconv záznam |