Unicode
Wikipedia
Unicode är en standard för teckenkodning. Unicode har samma teckenallokering, inklusive teckennamn, som den internationella standarden ISO/IEC 10646 (Universal Character Set, UCS). Även kodningsformerna (UTF-8, UTF-16, UTF-32) är gemensamma med ISO/IEC 10646. Unicode lägger till egenskaper, algoritmer och implementeringsanvisningar som inte är en del av ISO/IEC 10646.
Målet är att alla skrivtecken i världens alla skriftsystem skall finnas med: bokstäver, siffror, skiljetecken, matematiska symboler, m.m. Detta även för skriftsystem som inte längre används aktivt.
Unicode är tänkt att ersätta flera hundra äldre kodningar som ASCII, SJIS, ISO 8859-1, m.fl. Syftet är att få en världsgemensam teckenkodning som fungerar för alla, oavsett språk eller datorsystem. Unicode försöker så långt som möjligt vara kompatibelt med äldre standarder. Detta innebär bl.a. att tecken från alla gamla teckenkodningsstandarder, inklusive de-fakto standarder, tagits med.
Fördelen med att införa Unicode är att man ska kunna översätta datadokument, websidor, program osv. till valfritt språk, och det fungerar ur teknisk synpunkt, utan krångel. Med tidigare standarder gick det inte så bra, eftersom varje standard bara täckte ett mindre antal (eller ett enda) språk. Översättningen gav då arbete med tekniska problem, att få översättningen med rätt kodning, få programmet/dokumentet med rätt kodning, teckensnitt osv. Allt sådant ska försvinna, det ska fungera rakt av. Exempel: Wikipedia har drygt 200 språk, i allmänhet utan tekniska problem. Man kan blanda språk på samma sida. En artikel om en kinesisk eller arabisk person kan ha originalnamnet med i artikeln. (Till exempel som i [1] och [2] hade inte gått att skriva utan Unicode)
Varje existerande tecken från världens alla skriftsystem tilldelas ett heltal, en så kallad kodpunkt. När man refererar till en kodpunkt i beskrivande text, görs det på formen U+4-6 hexadecimala siffror. Exempelvis anges kodpunkten för α (grekiska lilla alfa) som U+03B1. Dessa kodpunkter representeras i sin tur av föjder av kodenheter, vilka varierar beroende på UTF-metod. Följden av kodenheter kan i sin tur serialiseras till en följd av oktetter (8-bitars bytes), som kan lagras i filer eller överföras mellan datorsystem.
Unicode har plats för över en miljon tecken - varav drygt 90 000 tecken redan är tilldelade. Unicodes kodutrymme på 1 114 112 (= 17 · 216) platser är uppdelat i 17 plan. Varje plan har plats för 65 536 kodplatser. Det första planet (plan 0), det så kallade Basic Multilingual Plane (BMP), är där de flesta tecken finns allokerade (än så länge). BMP innehåller tecken för de flesta moderna skriftspråk, samt ett stort antal symboler som används i text.
Varje plan indelas dels i rader omfattande 256 (28) tecken, dels i block. De senare är "areor" av varierande storlek reserverade för (delar av) teckensystem. Till exempel: hebreiska tecken hamnar i fösta hand i blocket Hebrew som sträcker sig från U+0590 till och med U+05FF.
Två ytterligare plan används för "grafiska" tecken. Plan 1, Supplementary Multilingual Plane (SMP), används mestadels till historiska skriftsystem, men även till exempel symboler för att skriva musik. Plan 2, Supplementary Ideographics Plane (SIP) används för över 40 000 ovanliga kinesiska tecken, de flesta historiska (en del direkta felskrivningar i ordböcker!), men även en del tecken som används i modern text.
Unicode initierades av Apple computer, inc. (Mark Davis) och Xerox Corporation (Joe Becker, Lee Collins) år 1980, men först 1991 bildades Unicodekonsortiet.
Unicode används bland annat i Windows, Mac OS, Symbian OS, Linux, Oracle, Sybase och andra system inklusive mobiltelefoner. Unicode är grundstandarden för tecken i HTML, XML (och därmed XHTML, XSL, med flera), CSS. Det är numera fallet även för de flesta programsspråk, inklusive Java, C, C#, ECMAScript, Ada, COBOL.
Innehåll |
[redigera] Skillnader mellan Unicode och ISO/IEC 10646
Unicode standardiserar teckenegenskaper, vilket ISO/IEC 10646 inte gör. Teckenegenskaper är bl.a. "generell kategori" (bokstav, siffra, m.m.), radbrytningsegenskaper, egenskaper för bidirektionalitet, och mycket mer.
ISO/IEC 10646 har formaliserade "delmängder", vilket Unicode inte har.
[redigera] Unicode 5.0.0 i siffror
- 2 048 kodpunkter är reservade för att uttrycka supplementära (d.v.s. i plan 01-10, hexadecimalt) kodpunkter i UTF-16,
- 137 468 är reserverade för "privat" användning,
- 66 (varav 34 i BMP) är reserverade för användning internt i applikationer,
- 98 886 grafikska tecken (bokstäver, skiljetecken, siffror, symboler),
- 203 styrtecken (inklusive s.k. formattecken)
- 836 siffror eller andra tecken som betecknar nummer,
- 437 skiljetecken,
- 4 032 symboler,
- 1 065 kombinerande tecken,
- 92 496 bokstäver (inklusive kinesiska tecken och förkomponerade hangulstavelser, men exklusive kombinerade bokstäver till exempel vokaler i indiska skriftsystem)
- 71 570 är CJK (d.v.s. kinesiska, japanska, koreanska) ideografiska tecken (i BMP och i SIP (plan 02)),
- 11 172 är förkomponerade hangulstavelser (koreanska; alla kan uttryckas med sekvenser av hangul-bokstäver, jamo),
- 1070 latinska tecken (siffror och skiljetecken oräknat, då dessa är gemensamma för många skriftsystem),
- 506 grekiska tecken,
- 277 kyrilliska tecken,
- 966 arabiska tecken (många av dessa är förformade sammanhängande former, vilka inte bör användas för inmatning och lagring),
- etc.
[redigera] Skriftsystem som finns med i Unicode
Unicode har tecken för nästan alla skriftsystem som används idag. Bland andra:
|
|
och fler. |
(Länkarna ovan är ibland till språk eller befolkningar snarare än direkt till skriftsystem.)
Dessutom finns bl.a. tekniska symboler, matematiska symboler, symboler för att skriva musik, och även symboler för APL med.
Fler skrivsystem har lagt till och läggs till, inklusive historiska skrivsystem (som till exempel runskrift) som inte längre används. Dessutom lägger man till tecken till skriftsystem som redan finns med, liksom symboler. Däremot har man sagt nej till skrivsystem som klingonska (används inte ens av klingonsällskapet, och symblerna är egentligen scendekor). För en del konstgjorda skriftsystem som bara används av en snäv krets entausiaster finns icke standardierade allokeringar inom kodeområdet för privat användning. En del av dessa kan på sikt komma att bli formellt standardiserade.
[redigera] Unifiering
Det finns långt över tusen skriftspråk i världen, men många använder samma tecken, eller nästan samma tecken. Precis som i äldre, mer begränsade kodningar, låter man i Unicode förena likadana tecken i olika språk till samma teckenkod, vilket kallats unifiering. Oftast är det trivialt. A-Z i engelska är till exempel samma som A-Z i svenska.
Man har dock valt att (liksom i äldre kodningar) skilja på tecken som ser likadana ut men är i olika skriftsystem. T.ex. så skiljer man på grekiskt, kyrilliskt och latinskt A. Dels för att de som sagt ligger i olika skriftsystem, men även för att de har lite olika egenskaper; i detta fall ser den motsvarande gemena bokstaven olika ut i latiska skriftsystemet och i grekiska skriftsystemet. Även inom vissa skriftsystem skiljer man på tecken med lika utsende: decimala siffror kodas alltid skilt från bokstäver (men det gäller inte andra sorters siffror).
För kinesiska, koreanska och japanska har unifieringen gjorts av en arbetsgrupp som kallas IRG (Ideographics Rapporteur Group). Den består av representanter från Japan, Kina, Taiwan, Vietnam, Sydkorea, och numera även Nordkorea. De har utgått från historika och semantiska principer. Den stavningsreform som resulterade i vad som brukar kallas förenklad kinesiska är inte ett separat skriftsystem, inte heller bara glyfvarianter av de tecken som används i traditionell stavning (traditionell kinesiska). Den reformerade stavningen använder helt enkelt andra (enklare) kinesiska tecken. Dock infördes endast ett mycket litet antal nya kinesiska tecken i och med stavningsreformen. Även historiska kinesiska tecken finns med. Det har hittills resulterat i att över 71 000 kinesiska tecken har kodats i ISO/IEC 10646 och Unicode (5.0).
[redigera] Unicode-kodningar (lagring och överföring)
Unicode använder teoretiskt c:a 21 bitar för ett tecken, eller mer exakt 1 114 112 möjliga positioner. Strängar av tecken måste lagras på något sätt i datorer, och i filer m.m. Om man lagrar tecknen som heltal med minst 21 bitar blir det ganska rättframt (UTF-32, d.v.s. med 32 bitar, då det är effektivare i dagens datorer än att använda 21 eller 24 bitar). Denna kodform används dock sällan, annat än för enskilda tecken, då den är mer utrymmeskrävande (mesta delen av texten kommer att lagras som null-bytes). Den används ofta internt i program om man inte har så mycket text, då den är enklast. Vanligare internt i program är att använda UTF-16 (men inte serialiseringarna UTF-16BE och UTF-16LE, de är för externt bruk). Ett vanligt sätt för filer är att använda UTF-8, vilket passar för bl.a. e-post (där man inte kan använda UTF-16), XHTML-sidor, C-program och liknande dataspråk med engelska nyckelord. UTF-8 används för Wikipedias sidor.
Lista över kodningar:
- UTF-7 (icke-officiell kodning), trots namnet EJ en UTF (utan en TES, Transfer Encoding Syntax), var avsett (enbart!) för e-post, men är även för denna användning helt överspelad,
- UTF-8,
- UTF-16 (en begränsad äldre variant kallas UCS-2), UTF-16BE, UTF-16LE (big endian respektive little endian byteserialiseringar),
- UTF-32, UTF-32BE, UTF-32LE (big endian respektive little endian byteserialiseringar),
- UTF-EBCDIC (icke-officiell kodning), EBCDIC-baserad,
- SCSU (icke-officiell kodning),
- BOCU-1 (icke-officiell kodning),
- Punycode, en TES (Transfer Encoding Syntax) avsedd endast för internationaliserade domännamn.
[redigera] Unicode i HTML och XML
HTML (som är SGML-baserat) och XML, och därmed alla XML-baserade dokumentformat, till exempel XHTML, XSL och SMIL, har Unicode som "dokumentteckenmängd". Dokumenten kan vara kodade i vilken "stödd" teckenkodning som helst (helst en som är gångbar på Internet, men även EBCDIC-baserade kodningar går i princip att använda). Kodningen bör deklareras i början av dokumentet (till exempel : encoding="UTF-8", encoding="ISO-8859-15" eller encoding="IBM500"'). För alla system som processar XML-baserade dokument krävs att de kan hantera kodningarna UTF-8, UTF-16BE, och UTF-16LE. Om man utelämnar teckenkodningasangivelsen i XML-baserade dokument, så ska teckenkodningen vara UTF-8.
Men oavsett vilken teckenkodning som används refererar de eventuella "numeriska teckenreferenserna" i dokumenten till Unicodes tecken, med de kodnummer de har där (alltå kodpunktens nummer, inte de nummer som används i kodformerna UTF-8 eller UTF-16). Till exempel så refererar μ alltid till grekiska lilla my (μ), som bland annat används för att beteckna "mikro", か (か) refererar alltid till Hiragana Letter KA och 𐌊 (𐌊) är alltid Old Italic Letter KA. (Det är inte säkert att ditt system har de fonter som behövs för detta, och du behöver i vilket fall en modern webbläsare).
Dokumentens källtexter blir dock ofta svårlästa om man använder teckenreferenser, så man bör begränsa användningen till tecken som inte kan representeras i dokumentets teckenkodning, eller till tecken som annars är "udda", till exempel U+200D ZERO WIDTH JOINER. Numeriska teckenreferenser kan även ges i decimal form (ovan är angivna i hexadecimal form), men detta är extra förvirrande då inga officiella teckentabeller använder decimalform.
[redigera] Unicode i program
En del plattformar har visst stöd för Unicode, som Java, Mac OS och Windows. Om man vill ha ett plattformsoberoende, och "open source", programmeringsgränssnitt (för C, C++ och Java) för Unicode finns ICU, International Components for Unicode. Se http://www.ibm.com/software/globalization/icu/index.jsp (för C, C++ och Java).
[redigera] Unicode i Internets domännamn
Ganska nytt (2003) är att man kan börja använda Unicode i Internets domännamn (se DNS), alltså (ungefärligen) namn på datorer eller webbplatser. För detta krävs en speciell kodning av namnen, den så kallade Punycode. Ser du ett domännamn där en del börjar med xn--, så är det ett "internationaliserat" domännamn (IDN) som inte har konverterats tillbaka till Unicode från Punycode. Än så länge (våren 2003) stöds inte konverteringen av allmänt använda program (e-postprogram, webbläsare och så vidare).
I URLer utanför domännamnet, till exempel "wiki/Unicode" i "http://sv.wikipedia.org/wiki/Unicode" har en annan kodning använts längre, nämligen UTF-8 omkodad med %-tecken och hex-koder, en relativt utrymmeskrävande metod (det vill säga 6 eller 9 tecken per icke-ASCII-tecken).
[redigera] Externa Länkar
Där finns datafiler över tecken och deras egenskaper, kodkartor, kapitlen i Unicodeboken i PDF-format, rapporter om Unicode och dess användning, mappningstabeller för några få av de över 700 andra teckenkodningar som finns i bruk, med mera.