Tegnsæt

Fra DDHFwiki
(Omdirigeret fra ASCII)
Spring til navigation Spring til søgning

Idag er der ét fælles tegnsæt for hele verden kaldet UNICODE. Det indeholder alle aktive alfabeter og en del inaktive af interesse for historikere - såsom runealfabetet. UNICODE bruger 32 bit per tegn. For at spare hukommelsesplads er der flere indkodningsformater, primært UTF-8, UTF-16 og UTF-32.

Før UNICODE eksisterede der flere måder at repræsentere tal og bogstaver. De to primære formater var EBCDIC og ASCII, og disse havde adskillige nationale og firma-specifikke varianter. I datahistorisk sammenhæng er det vigtigt at være opmærksom på dette for at en tekst-fil også kan forstås i fremtiden. Iøvrigt bliver 8-bit tegnsættene stadigvæk brugt mange steder, hvor konvertering til UNICODE ikke er sket.

EBCDIC

Extended Binary Coded Decimal Interchange Code (EBCDIC) bliver primært brugt på IBM mainframes. Det blev etableret i 1964 sammen med IBMs System/360 produktlinje. Det er en videreudvikling af Binary-Coded Decimal, der blev brugt til hulkort og EBCDIC kan stadigvæk kodes på hulkort.

I RAM og anden elektronisk lagring bliver EBCDIC kodet i 8 bit som vist i nedenstående tabel.

US EBCDIC
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
4_ SP ¢ . < ( + |
5_ & ! $ * ) ; ¬
6_ - / ¦ , % _ > ?
7_ : # @ ' = "
8_ a b c d e f g h i
9_ j k l m n o p q r
A_ s t u v w x y z
B_
C_ A B C D E F G H I
D_ J K L M N O P Q R
E_ S T U V W X Y Z
F_ 0 1 2 3 4 5 6 7 8 9 DEL


Da det oprindelige EBCDIC ikke havde nationale tegn (ñ, æ, ø, å, etc.) opstod der et stort antal varianter. Det kunne give nogle overraskelser når to firmaer skulle udveksle data.

CPR-systemet anvendte fra starten i 1968 et ret begrænset EBCDIC tegnsæt med 30 store bogstaver (A-Å) samt Ü (populært sagt ’tysk Y’). Dette gav anledning til, at det ikke var muligt i alle tilfælde at stave borgernes navne korrekt i CPR-systemet, idet der manglede bla. Ö, Ä, É m.v. Det var først fra april 1997 at CPR overgik til et nyt tegnsæt - code page 277, med i alt 114 små og store bogstaver. Stadigvæk EBCDIC. Ikke fordi hulkort stadigvæk var i brug, men printere, terminaler og andet udstyr var allerede anskaffet.

For mere information, se EBCDIC tegntabeller.

ASCII

De fleste andre computer-leverandører samlede sig omkring ASCII - American Standard Code for Information Interchange. Denne standard blev etableret i årene 1963-1967 og er baseret på behovene omkring telegrafi, som brugte hulstrimler som lagringsmedie. F.eks. er koden for at slette et tegn 0x7F. Det er det samme som at hulle alle positioner på en hulrække.

ASCII indkoder alle tegn i 7 bit og der er ikke plads til nationale tegn. ISO standardiseringsorganisationen ratificerede ASCII i 1967 som standard ISO 646 og indførte pladser i tegnsættet, hvor det var muligt at indsætte nationale tegn.

US-ASCII
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
2_ ! " # $ % & ' ( ) * + , - . /
3_ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4_ @ A B C D E F G H I J K L M N O
5_ P Q R S T U V W X Y Z [ \ ] ^ _
6_ ` a b c d e f g h i j k l m n o
7_ p q r s t u v w x y z { | } ~ DEL

I modsætning til de fleste andre lande, så er de danske ekstra bogstaver i forhold til engelsk placeret bagerst i alfabetet. Det gjorde det nemt at foretage sortering. Undtagelsen var Ü, men dette bogstav er ikke almindeligt i brug.

Dansk variant (ISO-646-DK)
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
2_ ! " # $ % & ' ( ) * + , - . /
3_ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4_ @ A B C D E F G H I J K L M N O
5_ P Q R S T U V W X Y Z Æ Ø Å Ü _
6_ ` a b c d e f g h i j k l m n o
7_ p q r s t u v w x y z æ ø å ü DEL

ASCII blev også brugt på tidlige personlige computere, såsom CP/M og ZX Spectrum, hvorimod Commodore 64 brugte en afart med kælenavnet PETSCII.

For mere information, se ISO-646 tegntabeller.

En af effekterne ved at udskifte kant- og krølleparenteser var at skrivning af C-kode kunne se ret besynderligt ud:

for (i = 0; i < 9; i++) æ
    bufferÆiÅ = 'Øn';
å

Problemet var anerkendt, og f.eks. Pascal, hvor { } bliver brugt til kommentarer, har en digraph som alternativ: (* *). C har trigraphs og Bjarne Stroustrup dannede alternativer for visse operatorer i C++, såsom || og &&.

Alternativt kunne det ske, at teksten blev indtastet på en terminal med en dansk tegnsæts-ROM, men skrevet ud på en printer, som ikke var blevet modificeret.

]ge bor p} \stergade 20, R|dovre

På grund af dette kan det være problematisk at specificere ASCII. Det er enten uden danske tegn, eller man bør angive ISO-646-DK.

8-bit tegnsæt

Bytes på 8 bit var blevet almindeligt og det betød at der var en bit som var ubenyttet. Der blev etableret flere nationale standarder, men først da IBM introducerede den oprindelige IBM PC i 1981 med code page 437, startede det i Europa. Den øvre halvdel blev fyldt op med grafiske symboler og nationale bogstaver. De danske ø og Ø var ikke med, så der blev skabt en nordisk variant, code page 865, inden lancering i Danmark, hvor ¢ blev ø, og ¥ blev Ø. IBMs specifikation blev ikke universelt accepteret, bla. fordi koderne fra 0 til 31 blev brugt til grafiske tegn og ikke kontrolkoder. Istedet blev Multinational Character Set fra Digital Equipment Corporation (DEC) brugt som base for ISO 8859-1, publiceret i 1987.

For mere information, se 8-bit tegntabeller.

UNICODE

De første 128 koder i UNICODE (ISO 10646) blev gjort identisk med ISO 646. Pladserne fra 128-255 blev identisk med ISO 8859-1. Andre udgaver af ISO 8859 for øst-europæisk, græsk, kyrillisk etc. blev lagt ind på de efterfølgende koder.

I forbindelse med UNICODE arbejdet blev der indsamlet viden om så mange nationale og hardware-specifikke tegnsæt som muligt. Der blev fremstillet mapningstabeller mellem hvert tegnsæt (nu kaldet "encodings") og UNICODE. Keld Simonsen på vegne af DKUUG og andre sponsorer skrev RFC 1345 indeholdende en kortlægning af et stort antal af disse. IANAs register over tegnsæt er i høj grad baseret på Keld Simonsens arbejde.

Og hvad med PETSCII? I 2020 blev UNICODE v. 13.0 udgivet hvor grafiske tegn fra et antal hjemmecomputere fra midten af 70erne til midten af 80erne og teletext var inkluderet.

Navne på tegn

Navne og alternativer
" Gåseøjne
# Nummertegn, havelåge, firkant
& Og-tegn
* Asteriks, stjernetegn
@ Snabel-a
[ Kantparentes
\ Omvendt skråstreg
_ Bundstreg, understreg
{ Tuborgklamme, krølleparentes
| Lodret streg
~ Tilde, bølgestreg
Ü Tysk Y