Unicode. Unikt vakkert eller unisont håpløst? En vandring gjennom tegnkodingens historie. Dag Lamgmyhr, Ifi/UiO Ark 1 av 23

Like dokumenter
Tegn og tekst. Posisjonssystemer. Logaritmer en kort repetisjon. Bitposisjoner og bitmønstre. Kapittel August 2008

Læringsmål. INF1000: Forelesning 12. Hovedkilde. Kunne binærtall og heksadesimale tall og konvertering mellom ulike tallsystemer: Titallsystemet

Tegn og tekst. \yvind og ]se N{rb}? Læreboka kapittel August Institutt for informatikk 29. august 2007.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Digital representasjon

Digital representasjon

INF1040 Oppgavesett 3: Tegn og tekst

Digital representasjon

Tegn og tekst. \yvind og ]se N{rb}? Læreboka kapittel 2. Institutt for informatikk Gerhard Skagestein 30. august 2006.

Vektorer. Dagens tema. Deklarasjon. Bruk

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

DRIFTSANALYSER 2012/2013 FORELØBIGE RESULTATER

Offentlig utvalg for punktskrift, OUP Norsk standard for 8-punktskrift punktskrift 24. oktober 2004 sist endret

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Datamaskinen LC-2. Dagens tema. Tall i datamaskiner Hvorfor kan LC-2 lagre tall i intervallet ? Hvorfor er det akkurat celler i lageret?

Dagens tema. Datamaskinen LC-2 En kort repetisjon. Binære tall Litt om tallsystemer generelt. Binære tall. Heksadesimale og oktale tall

Dagens tema. Flyt-tall. Koding. Tegnsett. Hvordan lagres de? Hvilke egenskaper har de? Hvordan regner man med dem?

Dagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.

INF 1000 høsten 2011 Uke 11: 2. november

INF 1000 høsten Innhold uke 11. Digital representasjon av tekster, tall, former,

IN 147 Program og maskinvare

Målet med dette notatet er å dokumentere at det er funnet løsmasser ved grunnen og å dokumentere miljøgiftkonsentrasjonen i sedimentene.

Netlife Sans er vår egen skrifttype. Den inneholder alle de visuelle elementene til identiteten vår. Den er tegnet i fire vekter, med en egen vekt

Albregtsen og Skagestein: Digital representasjon Løsningsforslag til kapittel 2 Representasjon av tegn og tekster

Tegn og tekst. Et representert tegn kan vises på flere måter. Noen definisjoner. Enda noen definisjoner. \yvind og ]se N{rb}? a a a.

Godkjenning av møteinnkalling

Programmeringsspråket C

Tegn og tekst. Læringsmål. Om tegn og glyfer. Problemstilling. \yvind og ]se N{rb?

Handi-Lift EA7 Målskjema

PDF created with pdffactory Pro trial version

INF1020 Algoritmer og datastrukturer GRAFER

'f( '?jfj(f{) Pa vegne av styret i Lenningen L(Ilypelag. Til Andelseiere og sponsorer i Lenningen L0ypelag!

PDF created with pdffactory Pro trial version

Velkommen til INF2100

Digital representasjon

Testobservator for kjikvadrattester

Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr

L ; D = B M B N I < G H = D = F C M E N < D ; <? ; < = H M = < F E < M B = B C O P E < E F D < Q K

Handi-Lift EA7 Målskjema

Målskjema. Serie nr.: Bruker Navn: Adresse: Kontaktpersoner. E-post: E-post: Levering Adresse:

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Godkjenning av møteinnkalling

Velkommen til INF2100

PDF created with pdffactory Pro trial version

STRATEGOS B. Målskjema. Serie nr.: Bruker Navn: Adresse: Kontaktpersoner. E-post: E-post: Levering Avd. Bruker Annet: Adresse:

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Husk å registrer deg på emnets hjemmeside!

INF1040 Digital representasjon Oppsummering

Oppsummering 2008 del 1

Oppsummering 2008 del 1

Handi-Lift ML7 Målskjema

Tegn og tekst. Om tegn og glyfer. Tegnkoder og kodetabeller Kode Noe som representerer noe annet. Et representert tegn kan vises på flere måter

Godkjenning av møteinnkalling

Velkommen til INF2100

INF Algoritmer og datastrukturer

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Programmeringsspråket C

Î Ö ØØ Ò Ú Ö

Steg 1: Felix har forsvunnet!

Forsvunnet katt webside

Ordliste 2. Byte (byte) En streng på 8 biter som behandles som en enhet.

Norsk Tyrkisk Oversettelse

HUMIT1731. Tekstkoding. Koding/merking av tekst Uke 35. Tekster som teknologiske produkter. Koding/merking på flere nivå. Utvikling av notesystemet

Perceived semantic. quality. Semantic quality. Syntactic. quality. guttens alder er grønn: gutt.alder = grønn

ﺪ ﻩ ﻋﺍ ﻮﹶ ﻭ ﻗ ﻪ ﹾﻘ ﹾﻟ ﻔ ﺍ ﹺﻝ ﻮ ﹸﺃ ﺻ ﹸ ﻣ ﺔ ﻮﹸ ﻈ ﻣ ﻨ $ ﺡﺮﺷ! " ' (# $% & )*! +,!* -

(a 1, a 2, a 3, a 4 ) ³Æ s 10. a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4. ( a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4) (a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4)

Del 1 En oversikt over C-programmering

Forstå skrifter. Skrive ut Innebygde skrifter. Papirhåndtering. Vedlikehold. Problemløsing. Administrasjon. Stikkordregister

Tom Heine Nätt og Christian F. Heide. Datasikkerhet

Innkalling er sendt til: Namn Funksjon Representerer

Dagens tema: Enda mer MIPS maskinkode

Læringsmål XML. Markering av tekst. SGML-familien. Forstå prinsippene bak XML og XHTML. Forstå hva XML kan brukes til og hvordan.

Vår ref.: Saksbehandler: Arkiv: 15/ Frode Mikalsen U43 AKVA Løpenr.: Tlf. dir.innvalg: Deres ref.: Dato: 6880/

! " # $ % & ^Pv`!$ x âîv7ç È'Ç È b j k Æ' z{3 b jkæ b ÇÈÉÊ&( )! c q r É. xy+ - Êlm l D E ` &! D E â î #" ' #$ '#! v( D/Ev A B x y&?

Forord. Det er i kostnadsberegningen ikke tatt med kostnader til grunnerverv, VA og elektro. Antatt kostnad fra fv. 155 Osloveien er 1,6 mill.

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

UNIVERSITETET I OSLO

Programmeringsspråket C

Seksjon 1. INF2270-V16 Forside. Eksamen INF2270. Dato 1. juni 2016 Tid Alle trykte og skrevne hjelpemidler, og en kalkulator, er tillatt.

En oppsummering. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen. Programmeringsoppgaver Flervalgsoppgaver

Efficiency, Integrity, Reliability, Surviveability, Usability. Correctness, Maintainability, Verifiability

Kravspesifisering (2): Validering av kravspek er

ISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.

Forstå skrifter. Skrive ut Innebygde skrifter. Bruke farger. Papirhåndtering. Vedlikehold. Problemløsing. Administrasjon.

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

Tegnsett. Innhold. Bakgrunn og historikk

InfoRed Publisering. - produktbeskrivelse. TalkPool WebServices Postboks Åneby

Velkommen til INF1060. Introduksjon til operativsystemer og datakommunikasjon

Uttrykkskraft for konseptuelle modelleringsspråk Metamodellering, ontologi

En oppsummering (og litt som står igjen)

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Business modelling is not process modelling Gordijn/Akkermans/van Vliet. : Den fysiske ytring med kontekst og referanse

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

S i d e : 1D a t o : 1 7 j u n i Ti d : 0 9 : 0 0 : 4 1

Cs preprosessor. Dagens tema. Betinget kompilering

Alfabet og språkteknologi

Transkript:

Unicode Unikt vakkert eller unisont håpløst? En vandring gjennom tegnkodingens historie Dag Lamgmyhr, Ifi/UiO Ark 1 av 23

Hva er tegnkoding? Tegnkoding er bare å definere en tabell over hvilke tegn man har. Eller er det litt vanskeligere... I urtiden På de første datamaskinene bestemte brukeren hvilke tegn som skulle brukes når skriverne og punchemaskinene ble bestilt. Problem Kommunikasjon med andre. Dag Lamgmyhr, Ifi/UiO Ark 2 av 23

ASCII I 1963 kom American Standard Code for Information Interchange; etter noen iterasjoner var ANSI X3.4-1986 klar. Alle tegnsett definert senere (unntatt EBCDIC) bygger på ASCII. Teknologi og påvirkning Minst to teknologiske spor: Liten bokstav stor bokstav: Enten c 32 eller c 0xDF Tegnet DEL har kode 0x7F = 1111111 2. Dag Lamgmyhr, Ifi/UiO Ark 3 av 23

ASCII 00 10 20 30 40 50 60 70 00 0 @ P p 01! 1 A Q a q 02 " 2 B R b r 03 # 3 C S c s 04 $ 4 D T d t 05 % 5 E U e u 06 & 6 F V f v 07 7 G W g w 08 ( 8 H X h x 09 ) 9 I Y i y 0a * : J Z j z 0b + ; K [ k { 0c, < L \ l 0d - = M ] m } 0e. > N ^ n ~ 0f /? O _ o Dag Lamgmyhr, Ifi/UiO Ark 4 av 23

Problem ASCII er egentlig bare egnet for amerikansk engelsk, hawaiisk, latin og swahili. Resultat Utallige lokale varianter. ISO 646 Løsningen ble en ny standard med veldefinerte lokale tilpasninger: ISO 646. Dag Lamgmyhr, Ifi/UiO Ark 5 av 23

ISO 646-60 («norsk ASCII») 00 10 20 30 40 50 60 70 00 0 @ P p 01! 1 A Q a q 02 " 2 B R b r 03 # 3 C S c s 04 $ 4 D T d t 05 % 5 E U e u 06 & 6 F V f v 07 7 G W g w 08 ( 8 H X h x 09 ) 9 I Y i y 0a * : J Z j z 0b + ; K Æ k æ 0c, < L Ø l ø 0d - = M Å m å 0e. > N ^ n ~ 0f /? O _ o Dag Lamgmyhr, Ifi/UiO Ark 6 av 23

Spesielt Tegnet. Problem Importert utstyr og programmer måtte oversettes. #include <stdio.h> int main () æ printf("hei, alle sammen!øn"); å Uklare definisjoner: er en aksent eller et anførselstegn? Mange tegn mangler: «,»,... Dag Lamgmyhr, Ifi/UiO Ark 7 av 23

ISO 8859 Løsningen ble ISO 8859 som var et 8-bits tegnsett. Felles for alle variantene var at første halvpart alltid var ASCII. Dag Lamgmyhr, Ifi/UiO Ark 8 av 23

ISO 8859-1 (= Latin-1) 80 90 a0 b0 c0 d0 e0 f0 00 À Ð à ð 01 ± Á Ñ á ñ 02 ² Â Ò â ò 03 ³ Ã Ó ã ó 04 Ä Ô ä ô 05 µ Å Õ å õ 06 Æ Ö æ ö 07 Ç ç 08 È Ø è ø 09 ¹ É Ù é ù 0a ª º Ê Ú ê ú 0b Ë Û ë û 0c ¼ Ì Ü ì ü 0d - ½ Í Ý í ý 0e ¾ Î Þ î þ 0f Ï ß ï ÿ Dag Lamgmyhr, Ifi/UiO Ark 9 av 23

Ulike varianter ISO 8859-1 (Vesten) Latin-1 ISO 8859-2 Sentral- og Øst-Europa Latin-2 ISO 8859-3 Sydøst-Europa + diverse Latin-3 ISO 8859-4 (Skandinavia + Baltikum) Latin-4 ISO 8859-5 Kyrillisk ISO 8859-6 Arabisk ISO 8859-7 Gresk ISO 8859-8 Hebraisk ISO 8859-9 Tyrkisk Latin-5 ISO 8859-10 Nordkalotten (inkl samisk) Latin-6 ISO 8859-11 Thai ISO 8859-13 Baltikum Latin-7 ISO 8859-14 Keltisk Latin-8 ISO 8859-15 Vesten Latin-9 (Latin-0) ISO 8859-16 Rumensk Latin-10 Dag Lamgmyhr, Ifi/UiO Ark 10 av 23

Moderniseringer ISO 8859-1 manglet blant annet C, œ og Œ. Derfor laget man ISO 8859-15 med noen endringer: Den har ennå ikke slått an. ¼ ½ ¾ C Š š Ž ž Œ œ Ÿ Dag Lamgmyhr, Ifi/UiO Ark 11 av 23

Problem Umulig å ha flere tegnsett i samme fil. (Standarden ISO 2022 finnes for dette, men har vært lite brukt, heldigvis.) Selv 191 tegn er for lite. Stadig uklart om er anførselstegn eller aksent. Dag Lamgmyhr, Ifi/UiO Ark 12 av 23

Unicode Egentlig to standarder: ISO 10646 og Unicode. Opprinnelig var målet en 16-bits standard. Nå har man 17 plan som hver er på 16 bit. Man trenger altså 21 bit. Dette gir plass til 1 114 112 tegn; i versjon 4.0 er det definert 96 382 tegn. Men: Alt man egentlig trenger er i plan 0 kalt Basic Multilingual Plain (= BMP). (De øvrige kalles ofte astralplan!) Prinsipp Man lagrer kodepunkter for tegn, ikke symboler! (glyfer) a=a=a=a=... = U+0061 ASCII og ISO 8859-1 inngår som ekte delmengder. Dag Lamgmyhr, Ifi/UiO Ark 13 av 23

Hvordan lagre Unicode-tegn? UTF-32 (= UCS-4) Tegnet lagres i 32 bit (4 byte). Fordeler Enkelt Ulemper Tar mye plass. Hva med byte-rekkefølgen («big-endian» eller «little-endian»)? Løsninger er tegnet U+FEFF («Zero width no-break space»). Det kan settes inn i filen uten å gi synlig effekt, og det finnes intet tegn U+FFFE. Dag Lamgmyhr, Ifi/UiO Ark 14 av 23

UTF-16 (UCS-2) Denne koding er basert på at «Alle tegn ligger i plan 0 unntatt de som ikke ligger der.» Alle tegn i plan 0 lagres uendret i 16 bit. Andre tegn lagres som to tegn ved å splitte opp kodepunktet i 2 deler à 10 bit: ❶ 0xD800 + (c 0x10000) >>10 ❷ 0xDC00 + (c 0x10000) 0x3FF Dette går bra siden det ikke finnes tegn U+D800 U+DFFF og vi ikke har flere enn 17 plan. UTF-16 har samme problem med byte-rekkefølgen som UTF-32 og samme løsningen. Dag Lamgmyhr, Ifi/UiO Ark 15 av 23

UTF-8 (UCS-1) Her kodes tegn med 1 4 byte: ❶ 7 bit: 0xxxxxxx ❷ 11 bit: 110xxxxx 10xxxxxx ❸ 16 bit: 1110xxxx 10xxxxxx 10xxxxxx ❹ 21 bit: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx ❺ osv (om nødvendig) Fordeler Meget kompakt. Ingen problemer med byte-rekkefølgen. Ulemper Ingen mulighet for indeksering. Dag Lamgmyhr, Ifi/UiO Ark 16 av 23

UTF-7 Denne koden brukes bare ved overføring av e-post. Hello, World! kodes som «Hello, World!». 1+1=2kodes som «1 +- 1 = 2». 1 kodes som «+AKM-1» der pundtegnet (U+00A3) kodes i UTF-16 som igjen kodes i Modified Base64 som «AKM». Dag Lamgmyhr, Ifi/UiO Ark 17 av 23

Problemer Tegn og symbol Hva er et tegn og hva er et symbol? Unicode er ikke konsekvent: 2 vs ²(U+00B2 i x²) vs «2.» (U+2489) vs... (U+22EF) σ vs ς Å (U+00C5) vs Å (U+212B for Ångström) Mange tegn mangler Ligaturer som fi og fl mangler samt andre tegn med typografisk formål som x Forskjellige definisjoner Mange tegn kan angis enten som et eget tegn eller som tegn med modifikator: é eller e+. Dag Lamgmyhr, Ifi/UiO Ark 18 av 23

Problem i Østen Unicode har nok gjort noen tabber for CJK-språkene: Han-tegnene ser ulike ut, men har samme Unicode-kodepunkt. Gaiji-tegn brukes i noen japanske navn, men finnes ikke i Unicode. Følgelig har disse landene lansert alternativer: TRON, UTF-2000, Giga Character Set (GCS). Dag Lamgmyhr, Ifi/UiO Ark 19 av 23

Det er andre problemer forbundet med en overgang: Programkode Det finnes millioner av programmer som antar at hvert tegn lagres i én byte. Java-produsentene har skjønt det: stream for å lese byte og reader for å oversette til tegn. Delvis implementasjoner Mange språk setter nå av 16 bit til tegn. Private felt Enkelte deler av Unicode er satt av til «privat bruk». Faren er at disse blir definert av ulik programvare. Mangelen på fonter Det er nå blitt en uoverkommelig jobb å lage en komplett font. De fleste fonter vil være ufullstendige på hver sin måte. Dag Lamgmyhr, Ifi/UiO Ark 20 av 23

Et generelt problem er: Hvordan få folk til å bruke riktig tegn: - U+2010 bindestrek U+2012 intervallstrek (1 4) U+2014 tankestrek U+2015 sitatstrek U+002D minus-tegn (a 1)... og hva skal en kompilator godta? Dag Lamgmyhr, Ifi/UiO Ark 21 av 23

I overgangsfasen I en overgangsfase vil det være spesielle problemer. Hvilken koding brukes? Det største problemet er: Hvilken koding brukes? Løsning 1: Legg det inn i filen: <!DOCTYPE HTML PUBLIC --*- coding: utf-8; -*-- "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/tr/html4/frameset.dtd"> <html> <head> <title>the ECOOP- Conference</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-language" content="en"> <link rel="shortcut icon" href="images/ecoop04-icon-alt.gif"> </head> Løsning 2: La leseprogrammet gjette. Dag Lamgmyhr, Ifi/UiO Ark 22 av 23

Status Hva er status? Nettlesere er kommet lengst der brukes Unicode i stor utstrekning. Kjernen i de fleste OS har tatt i bruk Unicode: Windows har brukt 16-bitsvarianten siden NT. Linux, OS/X og Solaris bruker UTF-8, også internt. Java (og andre språk) har tatt i bruk Unicode i hvert fall 16-bitsvarianten. Veldig få programmer vil tåle en overgang. Dag Lamgmyhr, Ifi/UiO Ark 23 av 23