En förklaring av kodning av Unicode-karaktär

För att en dator ska kunna lagra text och nummer som människor kan förstå måste det finnas en kod som omvandlas tecken i siffror. Unicode-standarden definierar en sådan kod med hjälp av teckenkodning.

Anledningen till att teckenkodningen är så viktig är att alla enheter kan visa samma information. Ett anpassat teckenkodningsschema kan fungera briljant på en dator, men problem uppstår när du skickar samma text till någon annan. Det vet inte vad du pratar om såvida det inte förstår kodningsschemat också.

Teckenkodning

All teckenkodning gör är att tilldela ett nummer till varje tecken som kan användas. Du kan skapa en teckenkodning just nu.

Till exempel kan jag säga att brevet EN blir numret 13, a = 14, 1 = 33, # = 123 och så vidare.

Det är här branschövergripande standarder kommer in. Om hela datorindustrin använder samma teckenkodningsschema kan varje dator visa samma tecken.

Vad är Unicode?

ASCII (amerikansk standardkod för informationsutbyte) blev det första utbredda kodningssystemet. Det är dock begränsat till endast 128 teckendefinitioner. Det här är bra för de vanligaste engelska tecken, siffror och skiljetecken, men det är lite begränsande för resten av världen.

instagram viewer

Naturligtvis vill resten av världen samma kodningsschema för sina karaktärer också. Men för lite, men beroende på var du var, kan det dock ha visats ett annat tecken för samma ASCII-kod.

I slutändan började de andra delarna av världen att skapa sina egna kodningssystem, och saker började bli lite förvirrande. Inte bara var kodningsschema av olika längder, program som behövdes för att räkna ut vilket kodningsschema de skulle använda.

Det visade sig att ett nytt teckenkodningsschema behövdes, vilket är när Unicode-standarden skapades. Målet med Unicode är att förena alla de olika kodningssystemen så att förvirringen mellan datorer kan begränsas så mycket som möjligt.

Idag definierar Unicode-standarden värden för över 128 000 tecken och kan ses på Unicode Consortium. Det har flera teckenkodningsformer:

  • UTF-8: Använd bara en byte (8 bitar) för att koda engelska tecken. Den kan använda en sekvens av byte för att koda andra tecken. UTF-8 används ofta i e-postsystem och på internet.
  • UTF-16: Använder två byte (16 bitar) för att koda de mest använda tecknen. Vid behov kan de extra tecknen representeras av ett par 16-bitarsnummer.
  • UTF-32: Använder fyra byte (32 bitar) för att koda tecken. Det visade sig att när Unicode-standarden växte, är ett 16-bitarsnummer för litet för att representera alla karaktärer. UTF-32 kan representera varje Unicode-tecken som ett nummer.

Notera: UTF betyder Unicode Transformation Unit.

Kodpoäng

En kodpunkt är värdet som ett tecken ges i Unicode-standarden. Värdena enligt Unicode skrivs som hexadecimala nummer och har ett prefix av U +.

För att till exempel koda tecken vi tittade på tidigare:

  • EN är U + 0041
  • en är U + 0061
  • 1 är U + 0031
  • # är U + 0023

Dessa kodpunkter är uppdelade i 17 olika sektioner som kallas plan, identifierade med siffrorna 0 till 16. Varje plan har 65 536 kodpunkter. Det första planet, 0, innehåller de mest använda karaktärerna och är känd som Basic Multilingual Plane (BMP).

Kodenheter

Kodningsschemaen består av kodenheter som används för att tillhandahålla ett index för var ett tecken är placerat i ett plan.

Betrak UTF-16 som ett exempel. Varje 16-bitarsnummer är en kodenhet. Kodenheterna kan omvandlas till kodpunkter. Exempelvis har den platta teckensymbolen a en kodpunkt U + 1D160 och lever på det andra planet i Unicode-standarden (Kompletterande Ideografiska plan). Det skulle kodas med hjälp av kombinationen av 16-bitars kodenheterna U + D834 och U + DD60.

För BMP är värdena på kodpunkterna och kodenheterna identiska. Detta tillåter en genväg för UTF-16 som sparar mycket lagringsutrymme. Den behöver bara använda ett 16-bitarsnummer för att representera dessa tecken.

Hur använder Java Unicode?

Java skapades ungefär den tiden då Unicode-standarden hade värden definierade för en mycket mindre uppsättning tecken. Då kände man att 16-bitar skulle vara mer än tillräckligt för att koda alla tecken som någonsin skulle behövas. Med detta i åtanke var Java designad för att använda UTF-16. Char data-typen användes ursprungligen för att representera en 16-bitars Unicode-kodpunkt.

Sedan Java SE v5.0 representerar char en kodenhet. Det gör liten skillnad för att representera tecken som finns i det grundläggande flerspråkiga planet eftersom värdet på kodenheten är detsamma som kodpunkten. Det betyder emellertid att för karaktärerna på de andra planen behövs två rader.

Det viktiga att komma ihåg är att en enda char-datatyp inte längre kan representera alla Unicode-tecken.

instagram story viewer