UTF-32

UTF-32 ( Eng.  Unicode Transformation Format ) eller UCS-4 (universal character set, eng.  Universal Character Set ) i datalogi  er en af ​​måderne at kode Unicode - tegn på, ved at bruge præcis 32 bit til at kode et hvilket som helst tegn. De resterende kodninger, UTF-8 og UTF-16, bruger et variabelt antal bytes til at repræsentere tegn. Et UTF-32-tegn er en direkte repræsentation af dets kodeposition ( kodepunkt).

Den største fordel ved UTF-32 i forhold til kodninger med variabel længde er, at Unicode-tegn kan indekseres direkte. At opnå den n'te kodeposition er en operation, der tager samme tid. I modsætning hertil kræver koder med variabel længde sekventiel adgang til den n'te kodeposition. Dette gør det nemt at erstatte tegn i UTF-32-strenge ved at bruge et heltal som et indeks, som det normalt gøres for ASCII -strenge .

Den største ulempe ved UTF-32 er dens ineffektive brug af plads, da fire bytes bruges til at gemme et tegn. Tegn, der ligger uden for nulplanet (basis) af koderummet, bruges sjældent i de fleste tekster. Derfor er en fordobling, sammenlignet med UTF-16, pladsen optaget af strenge i UTF-32 ikke berettiget.

Selvom det er praktisk at bruge et fast antal bytes pr. tegn, er det ikke så godt, som det lyder. String trunkering er lettere at implementere end UTF-8 og UTF-16. Men det gør det ikke hurtigere at finde en specifik offset i en streng, da forskydningen også kan beregnes for kodninger med fast størrelse. Dette gør det ikke let at beregne den viste linjebredde, undtagen i et begrænset antal tilfælde, da selv et "fast-width"-tegn kan opnås ved at kombinere et almindeligt tegn med en modifikator, der ikke har nogen bredde. For eksempel kan bogstavet "y" udledes af bogstavet "i" og " hook over bogstavet " diakritisk . Kombinationen af ​​sådanne tegn betyder, at teksteditorer ikke kan behandle 32-bit kode som en redigeringsenhed. Redaktører, der er begrænset til at arbejde med venstre-til-højre og prækomponerede tegnsprog, kan bruge tegn i fast størrelse . Men det er usandsynligt, at sådanne editorer understøtter tegn uden for nulplanet (basisplanet) af koderummet og fungerer næppe lige så godt med UTF-16-tegn.  

Historie

ISO 10646 - standarden definerer en 31-bit kodningsform kaldet UCS-4, hvor hvert kodet tegn er repræsenteret af en 32-bit kodeværdi i koderummet for tal fra 0 til 7FFFFFFF.

Da der faktisk kun bruges 17 fly, har koderne for alle tegn værdier fra 0 til 0x10FFFF. UTF-32 er en delmængde af UCS-4, der kun bruger dette område. Da JTC1/SC2/WG2-dokumentet angiver, at alle fremtidige tegntildelinger vil være begrænset til nulplanet (basis) af koderummet eller de første 14 ekstra planer, vil UTF-32 være i stand til at repræsentere alle Unicode-tegn. Derfor er UCS-4 og UTF-32 identiske på nuværende tidspunkt, bortset fra at UTF-32-standarden har yderligere Unicode-semantik.

Brug

UTF-32 bruges ikke primært i tegnstrenge, men i interne API'er , hvor dataene er et enkelt kodepunkt eller glyph . Når du for eksempel tegner tekst, opbygger det sidste trin en liste over strukturer, som hver omfatter x- og y-positioner, attributter og et enkelt UTF-32-tegn, der identificerer den glyf, der skal tegnes. Ofte gemmer de "ubrugte" 11 bit af hvert 32-bit tegn uvedkommende information.

UTF-32 bruges til at gemme strenge på Unix , når wchar_t -typen er defineret som 32-bit. Python - programmer til og med 3.2 kan være blevet kompileret til at bruge UTF-32 i stedet for UTF-16. Fra version 3.3 er understøttelse af UTF-16 blevet fjernet, og strenge er gemt i UTF-32, men indledende nuller er optimeret, hvis de ikke bruges. På Windows , hvor wchar_t-typen er 16 bit, bruges UTF-32-strenge næsten aldrig.

Bruger ikke UTF-32 i HTML5

HTML5 - standarden siger, at "Forfattere bør ikke bruge UTF-32, fordi de kodningsalgoritmer, der er beskrevet i denne specifikation, ikke adskiller den fra UTF-16."

Links