Uppsala universitet
Institutionen för lingvistik
Språkteknologiprogrammet
Grundläggande databehandling, ht 2002
Leif-Jöran Olsson

Föreläsning 6: Tecken- och dokumentrepresentation

Innehåll

  1. Inledning
  2. Teckenrepresentation
  3. Dokumentrepresentation

1 Inledning

Som nämnts vid flera tillfällen tidigare på kursen: Saker och ting uppfattas olika på olika nivåer. Idag några av de tydligaste exemplen på det: Representation av enskilda tecken och representation av dokument.


2 Teckenrepresentation

För att representera tecken och text i datorn krävs en "kodning" av tecknen. Kodningarna är inget annat än konventioner, och alltså finns flera olika som inte stämmer överens med varandra. Man kan jämföra med teckenkodningen morse som gör det möjligt att skicka bokstäver och andra tecken med hjälp av bara korta och långa signaler. Teckenkodningarna som datorerna använder gör det möjligt att skicka bokstäver och andra tecken med hjälp av bara "ettor och nollor", så länge alla inblandade parter är överens om kodningen.

ASCII

Av de äldre teckenkoderna är det nästan bara en som har överlevt: ASCII (= American Standard Code for Information Interchange). Den publicerades först 1963, blev (i reviderad form) ANSI-standard 1968 (ANSI = American National Standards Institute). Den började tidigt användas av alla datortillverkare utom den absolut största, IBM.

Även den internationella standardiseringsorganisationen ISO kom att bygga standarder på ASCII. Det är en "7-bitarskodning" (värden 0--127) och har med alla tecken på ett vanligt amerikanskt tangentbord:

Koderna i ASCII ser ut ungefär som följer:

För svenska ändamål saknar man i första hand ÅÄÖ. Det var ungefär lika lite avsikten med ASCII att stödja svensk text som rysk, japansk eller arabisk, så det är inte på grund av någon miss.

ISO 8859 och andra utökningar av ASCII

ASCII använder bara 7 bitar (128 tecken), men i en byte finns det 8 bitar. Genom att använda den återstående biten kan man utöka ASCII med 128 tecken till. Detta gjordes i en mängd olika persondatorer för att kunna stödja andra språk än engelska. Det blev dock ingen standardisering, utan olika tillverkare hittade på olika utökningar, vilket innebar problem när man skulle föra över data från ett system till ett annat.

ISO-standarden ISO 8859 kom 1987 och specificerade ett antal sådana utökningar till ASCII. ISO 8859-1 som är till för västeuropeiska språk är den mest kända, och brukar kallas för "Latin-1", men det finns flera, bland annat:
ISO 8859-1Latin-1: västeuropeiska språk
ISO 8859-2Latin-2: östeuropeiska språk
ISO 8859-3Latin-3: sydeuropeiska språk
ISO 8859-4Latin-4: nordeuropeiska språk
ISO 8859-5Kyrilliska
ISO 8859-6Arabiska
ISO 8859-7Grekiska
ISO 8859-8Hebreiska
ISO 8859-9Latin-5: turkiska
ISO 8859-10Latin-6: nordiska och baltiska

Latin-1 har blivit vanlig på Internet, t.ex. i mail, på webbsidor, och så vidare. Även Microsoft använder sig nästan av Latin-1. (De har egna kodningar som är nästan som Latin-1.)

Början på den här texten i oktal-representation av teckenkodningen Latin-1:

	    
0000000 074 110 124 115 114 076 012 040 040 074 110 105 101 104 076 012
0000010 040 040 040 040 074 124 111 124 114 105 076 012 040 040 040 040
0000020 040 040 107 162 165 156 144 154 344 147 147 141 156 144 145 040
0000030 144 141 164 141 142 145 150 141 156 144 154 151 156 147 054 040
0000040 150 164 040 062 060 060 062 072 040 106 366 162 145 154 344 163
0000050 156 151 156 147 040 066 012

Början på den här texten i teckenkodningen Latin-1 med radbrytningar utsatta:

0000000   <   H   T   M   L   >  \n           <   H   E   A   D   >  \n
0000010                   <   T   I   T   L   E   >  \n                
0000020           G   r   u   n   d   l   ä   g   g   a   n   d   e    
0000030   d   a   t   a   b   e   h   a   n   d   l   i   n   g   ,    
0000040   h   t       2   0   0   2   :       F   ö   r   e   l   ä   s
0000050   n   i   n   g       6  \n

UNICODE / UCS

Det vore på många sätt skönt att bara använda en enda teckenkodning. Att inte behöva använda olika för olika ändamål eller på olika system, och sen behöva konvertera mellan dessa, utan att det "bara fungerar".

Unicode är ett sådant projekt, som startade som ett samarbete mellan amerikanska datorföretag på 80-talet, i synnerhet Xerox och IBM, och sen skapades ett eget Unicode Consortium. Samtidigt höll ISO på med ett liknande projekt, UCS = Universal Character Set, men blev genom Unicode-gruppens inflytande 1992 övertalat att överge sin början och anta vad Unicode gjort istället. ISO 10646:Version 2 kom att i princip bli samma teckenkodning som Unicode.

"Basplanet" av UCS består av endast 65536 tecken (16 bitar), men totalt är UCS en 31-bitars kod (över 2 miljarder tecken) och räcker gott till. Hittills har *** [Visar unicodeboken över version 3. Se även http://www.unicode.org/.]

Radbrytningar

Bland kontrolltecknen i ASCII finns bland annat ett som heter "carriage return" (CR) och ett som heter "line feed" (LF). Carriage return = vagnretur på en skrivmaskin, dvs. man går tillbaka till att skriva på början av raden. Line feed = pappersmatning ett steg framåt. För att börja skriva på början av nästa rad (= radbrytning) krävdes alltså både vagnretur och pappersmatning, och till exempel i DOS är det fortfarande så att ny rad markeras av CRLF, alltså av två kontrolltecken.

En del system har bytt konvention för att bara använda ett tecken för nyrad. I Unix används bara LF. I MacOS används bara CR. Detta är alltså en källa till olikheter även när man använder samma teckenkodning.

När man öppnar en fil i Emacs skriver den "(DOS)" eller "(Mac)" i början av moderaden för att visa det ifall filen kodar nyrader så som DOS respektive MacOS gör.

3 Dokumentrepresentation

När används sådana här "rena textfiler"? Program är sådana, till exempel. Enkla textfiler, som README eller licensfiler som följer med program. Mycket mail (men det förekommer också mail i HTML).

Ett formaterat textdokument kan representeras på olika sätt.

Binära filformat

MS Word (och flera andra ordbehandlare och andra officeprogram) sparar informationen i ett binärt format.

Textbaserade (Postscript)

Postscript är i en helt annan genre av språk, inte för beskrivning av ett dokument som sådant, utan av en utskrift.

Beskriver sidan med hjälp av matematiska formler och halvt läsbara kommandon på formen (ungefär): "Cirkel i punkt (10cm, 12cm) med radie 4cm och tjocklek 1mm. Rita den!" (Postscript är egentligen ett helt programmeringsspråk som är särskilt bra på att rita saker på papper.)

(Det allt mer populära filformatet PDF bygger på Postscript.)

Textbaserade (SGML, XML)

Ni har redan sett på XHTML som är ett uppmärkningsspråk definierat av SGML. SGML är en rätt gammal standard som klarar av rätt mycket. (Mycket mer än vad XHTML använder sig av, till exempel.) XML är en modernare "lätt-SGML" som har stöd för sånt som oftast behövs. Många nya uppmärkningsspråk bygger på XML istället för SGML.


Senast ändrad av Leif-Jöran Olsson 2002-10-03 09:11 (efter Per Starbäck).