Koding av tekst

Redaktør: Håkon Tolsby

Læringsmål: Lære om de ulike standarder for koding av tekst.

Innhold:

  • Ascii
  • ISO 8859-X
  • Unicode
  • og hva det nå er for noe alt sammen

Sist oppdatert: 12. august 2012


 

Innledning

Alle data som skal lagres i maskinen må være på binær form. Det gjelder også tekst. Karakter og tegn blir representert med binære koder. Problemet har vært at kodene har vært små og ikke har dekket alle verdens karakterer.

Fordi maskinressurser har vært et knappehetskode har man kun brukt 8 biter for å kode karakterer. Det gir mulighet for å kode 256 forskjellige tegn, og dermed har flere bokstaver i mange språk blitt utelatt.

Det finnes flere kodesett for karakter og vi skal her nevne noen av dem.

Tabellen viser et utdrag av karakterene i ISO Latin-1 standarden. Den viser karakter, desimalverdi, heksverdi og HTML betegnelse.

Karakter

Des

Heks

HTML

Karakter

Des

Heks

HTML

         

0

48

30

1

49

31

2

50

32

3

51

33

4

52

34

5

53

35

6

54

36

7

55

37

8

56

38

9

57

39

@

64

40

A

65

41

B

66

42

C

67

43

D

68

44

E

69

45

F

70

46

G

71

47

H

72

48

I

73

49

J

74

4a

K

75

4b

L

76

4c

M

77

4d

N

78

4e

O

79

4f

P

80

50

Q

81

51

R

82

52

S

83

53

T

84

54

U

85

55

V

86

56

W

87

57

X

88

58

Y

89

59

Z

90

5a

[

91

5b

À

192

c0

À

Á

193

c1

Á

Â

194

c2

Â

Ã

195

c3

Ã

Ä

196

c4

Ä

Å

197

c5

Å

Æ

198

c6

Æ

Ç

199

c7

Ç

ASCII-koden ( American Standard Code for Information Interchange)

Ascii-koden benytter kun 7 biter til å representere tegn og omfatter derfor bare 127 tegn.

Det var lenge den eneste brukte koden og skapte store problemer for norsk tekst. Siden koden var tilpasset det engelske språk, omfatter den ikke norske bokstaver som æøå.

8 biters ascii omfatter 256 tegn, også æøå, men det er ingen veldefinert standard, og den kan variere fra system til system. Fremdeles er ascii en viktig kode som støttes av de fleste systemer selv om karaktersettene fra ISO dominerer.

ISO 8859-X

ISO (International Standardisation Organisation) har definert en serie (ti stykk foreløpig) med 8 biters karakterkoder for de fleste språk. Disse standardene ble spesielt viktige med Internett hvor utveksling av tekst mellom personer og ulike språk økte voldsomt. De fleste internettklienter støtter derfor ulike karaktersett fra ISO, og man kan spesifisere hvilken språk man ønsker.

Det vanligste karaktersettet fra ISO er Latin 1 (ISO-8859-1) som dekker alle vesteuropeiske språk inklusive norsk. Den er delvis kompatibelt med ascii da de viktigste tegnene har de samme kodene.

Det finnes andre slike utvidede ASCII-tabeller som dekker andre språkområder. En nettleser som har tilgang til disse utvidede ASCII-tabellene kan altså framstille forskjellige tegnsett. Noen eksempler på andre utvidede ASCII-tabeller.

Du kan eksperimentere med tegnsett her: iso_8859_1.html

Unicode

De forskjellige variantene av utvidet ascii er ikke en god og tilstrekkelig generell løsning. Vi kan finne opp den ene variantene etter den andre, men det er tungvindt og vi vil finne språk som ikke får plass innen de rammene som settes av 256 samtidige tegn.

Løsningen på dette ser ut til å være Unicode, en tegnkoding som dekker alle behov. Den vanlige er UTF-8. Det vil si en tegnkoding som tar utgangspunkt i et 8-bits system som kan utvides.

Et tegn i UTF-8 kan legge beslag på 1,2,3 eller 4 bytes. Denne løsningen er valgt for å spare plass. De hyppigst forekommende tegnene i verdens tekstmasse (ascii) er beskrevet med 1 byte.

Alternativet var at vi valgte en koding som alltid tok n-bytes, der n >1. Hvis vi f.eks. valgte n=2 ville vi ha et tegnsett med muligheter for 216 tegn. 216=65536 er et ganske stort tall og vi ville trolig dekke de fleste nødvendige, samtidige, tegn. Det vil så vidt jeg vet dekke det kinesiske alfabetet, der de mest omfattende samlingene av ord inneholder 40- til 50 000 tegn. En slik løsning ville imidlertid bety at den (store) delen av verdens teksmateriale som lar seg beskrive med med Latin-1 ville ta dobbelt så stor plass som den gjør idag. Løsningen med n=2 er kjent som UTF-16. Hvis du endrer en fil fra ISO-8859-1 (Latin-1) og til UTF-16 så vil den bli dobbelt så stor.

UTF-8 er organisert slik at enkelte tegn er reserverte for å angi ekspansjon av koden. Det vil si at dersom et slik utvidelsestegn opptrer i en sekvens så skal programmet som leser tolke etterfølgende byte som del av tegnbeskrivelsen.

Bruk UTF-8 på all tekst!