En forklaring av Unicode-tegnkoding

En person som bruker en bærbar datamaskin

RUNSTUDIO/Bildebanken/Getty Images





For at en datamaskin skal kunne lagre tekst og tall som mennesker kan forstå, må det være en kode som transformerer tegn inn i tall. Unicode-standarden definerer en slik kode ved å bruke tegnkoding.

Grunnen til at tegnkoding er så viktig er at hver enhet kan vise den samme informasjonen. Et tilpasset tegnkodingsskjema kan fungere utmerket på én datamaskin, men det vil oppstå problemer når du sender den samme teksten til noen andre. Den vil ikke vite hva du snakker om med mindre den forstår kodingsskjemaet også.



Tegnkoding

Alt tegnkoding gjør er å tildele et nummer til hvert tegn som kan brukes. Du kan lage en tegnkoding akkurat nå.

For eksempel kan jeg si at brevet EN blir tallet 13, a=14, 1=33, #=123, og så videre.



Det er her bransjestandarder kommer inn. Hvis hele dataindustrien bruker det samme tegnkodingsskjemaet, kan hver datamaskin vise de samme tegnene.

Hva er Unicode?

ASCII (American Standard Code for Information Interchange) ble det første utbredte kodingsskjemaet. Den er imidlertid begrenset til bare 128 tegndefinisjoner. Dette er greit for de vanligste engelske tegnene, tallene og tegnsettingen, men er litt begrensende for resten av verden.

Naturligvis vil resten av verden ha samme kodeskjema for karakterene deres. Men for en liten stund, avhengig av hvor du var, kan det ha blitt vist et annet tegn for den samme ASCII-koden.

Til slutt begynte de andre delene av verden å lage sine egne kodingsskjemaer, og ting begynte å bli litt forvirrende. Ikke bare var kodeskjemaene av ulik lengde, programmer trengte for å finne ut hvilket kodeskjema de skulle bruke.



Det ble tydelig at et nytt tegnkodingsskjema var nødvendig, og det var da Unicode-standarden ble opprettet. Målet med Unicode er å forene alle de forskjellige kodingsskjemaene slik at forvirringen mellom datamaskiner kan begrenses så mye som mulig.

I disse dager definerer Unicode-standarden verdier for over 128 000 tegn og kan sees på Unicode-konsortiet . Den har flere tegnkodingsformer:



    UTF-8:Bruker bare én byte (8 bits) for å kode engelske tegn. Den kan bruke en sekvens av byte for å kode andre tegn. UTF-8 er mye brukt i e-postsystemer og på internett.UTF-16:Bruker to byte (16 biter) for å kode de mest brukte tegnene. Om nødvendig kan tilleggstegnene representeres av et par 16-bits tall.UTF-32:Bruker fire byte (32 biter) for å kode tegnene. Det ble tydelig at etter hvert som Unicode-standarden vokste, er et 16-bits tall for lite til å representere alle tegnene. UTF-32 er i stand til å representere hvert Unicode-tegn som ett tall.

Merk: UTF betyr Unicode Transformation Unit.

Kodepoeng

Et kodepunkt er verdien som et tegn er gitt i Unicode-standarden. Verdiene i henhold til Unicode skrives som heksadesimale tall og har et prefiks på U+ .



For eksempel, for å kode tegnene vi så på tidligere:

  • EN er U+0041
  • en er U+0061
  • 1 er U+0031
  • # er U+0023

Disse kodepunktene er delt inn i 17 forskjellige seksjoner kalt fly, identifisert med tallene 0 til 16. Hvert fly har 65 536 kodepunkter. Det første planet, 0, inneholder de mest brukte tegnene og er kjent som Basic Multilingual Plane (BMP).



Kode enheter

Kodingsskjemaene består av kodeenheter, som brukes til å gi en indeks for hvor et tegn er plassert på et plan.

Tenk på UTF-16 som et eksempel. Hvert 16-bits tall er en kodeenhet. Kodeenhetene kan transformeres til kodepunkter. For eksempel har flatnotesymbolet ♭ et kodepunkt på U+1D160 og lever på det andre planet av Unicode-standarden (Supplerende Ideografisk Plan). Den vil bli kodet ved å bruke kombinasjonen av 16-bits kodeenhetene U+D834 og U+DD60.

For BMP er verdiene til kodepunktene og kodeenhetene identiske. Dette tillater en snarvei for UTF-16 som sparer mye lagringsplass. Den trenger bare å bruke ett 16-bits tall for å representere disse tegnene.

Hvordan bruker Java Unicode?

Java ble opprettet rundt tiden da Unicode-standarden hadde verdier definert for et mye mindre sett med tegn. Den gang følte man at 16-bits ville være mer enn nok til å kode alle tegnene som noen gang ville være nødvendig. Med det i tankene ble Java designet for å bruke UTF-16. Char-datatypen ble opprinnelig brukt til å representere et 16-bits Unicode-kodepunkt.

Siden Java SE v5.0 representerer tegnet en kodeenhet. Det gjør liten forskjell for å representere tegn som er i Basic Multilingual Plane fordi verdien av kodeenheten er den samme som kodepunktet. Det betyr imidlertid at for karakterene på de andre flyene trengs to tegn.

Det som er viktig å huske er at en enkelt tegndatatype ikke lenger kan representere alle Unicode-tegnene.