For at en datamaskin skal kunne lagre tekst og tall som mennesker kan forstå, må det være en kode som transformeres tegn i tall. Unicode-standarden definerer en slik kode ved å bruke karakterkoding.
Årsaken til karakterkoding er så viktig er at alle enheter kan vise den samme informasjonen. Et tilpasset tegnkodingsskjema kan fungere strålende på en 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 karakterkoding gjør er å tildele et nummer til hvert tegn som kan brukes. Du kan lage en karakterkoding 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 datamaskinindustrien bruker samme tegnkodingsskjema, kan hver datamaskin vise de samme tegnene.
Hva er Unicode?
ASCII (amerikansk standardkode for informasjonsutveksling) ble den første utbredte kodingsordningen. Imidlertid er det begrenset til bare 128 tegnsdefinisjoner. Dette er greit for de vanligste engelske tegn, tall og tegnsetting, men er litt begrensende for resten av verden.
Naturligvis ønsker resten av verden det samme kodingsskjemaet for figurene deres også. Imidlertid kan det ha vist et annet tegn for samme ASCII-kode, avhengig av hvor du var.
Til slutt begynte de andre delene av verden å lage sine egne kodingsordninger, og ting begynte å bli litt forvirrende. Ikke bare var kodingsskjemaene i forskjellige lengder, programmer som trengs for å finne ut hvilket kodingsskjema de skulle bruke.
Det ble tydelig at det var behov for et nytt tegnkodingsskjema, som var når Unicode-standarden ble opprettet. Målet med Unicode er å forene alle de forskjellige kodingsordningene 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 Consortium. Den har flere karakterkodingsformer:
- UTF-8: Bruker bare en byte (8 biter) for å kode engelske tegn. Den kan bruke en sekvens med 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 de ekstra tegnene bli representert med et par 16-bits tall.
- UTF-32: Bruker fire byte (32 bit) for å kode tegnene. Det viste seg at etter hvert som Unicode-standarden vokste, er et 16-bits tall for lite til å representere alle karakterene. UTF-32 kan 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 er skrevet som heksadesimale tall og har et prefiks på U +.
For å kode for 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 tall 0 til 16. Hvert fly har 65.536 kodepoeng. Det første planet, 0, inneholder de mest brukte tegnene og er kjent som Basic Multilingual Plane (BMP).
Kodenheter
Kodingsskjemaene består av kodeenheter, som brukes til å gi en indeks for hvor et tegn er plassert på et plan.
Vurder UTF-16 som et eksempel. Hvert 16-bits nummer er en kodeenhet. Kodenhetene kan transformeres til kodepunkter. For eksempel har flatnotesymbolet a et kodepunkt på U + 1D160 og lever på det andre planet i Unicode-standarden (Supplementary Ideographic Plane). Det vil bli kodet ved å bruke kombinasjonen av 16-bits kodenheter 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. Det 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. Da føltes det at 16-bits ville være mer enn nok til å kode alle tegnene som noen gang ville være nødvendig. Med det for øye ble Java designet for å bruke UTF-16. Char data-typen ble opprinnelig brukt til å representere et 16-biters Unicode-kodepunkt.
Siden Java SE v5.0 representerer røyten en kodeenhet. Det gjør liten forskjell for å representere tegn som er i det flerspråklige planet fordi verdien av kodeenheten er den samme som kodepunktet. Det betyr imidlertid at for karakterene på de andre flyene er det behov for to tegn.
Det viktige å huske er at en enkelt char data-type ikke lenger kan representere alle Unicode-tegnene.