ASCII
Den här artikeln behöver källhänvisningar för att kunna verifieras. (2020-12) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
ASCII [ˈaskɪ], eller American Standard Code for Information Interchange, är en teckenkodning som används för att representera bokstäver och andra tecken i datorer. Koden använder sju bitar vilket ger plats för 128 olika tecken. ASCII designades för USA:s behov och räcker inte för något annat språk än engelska, eftersom några andra bokstäver än A-Z och a-z inte ingår. ASCII-standarden publicerades första gången 1963.
Med ASCII som grund har olika utvidgningar till 8 bitar gjorts, ofta kallade utökad ASCII (utökad ASCII kallas ibland felaktigt ASCII, och ASCII kallas ibland US-ASCII för att klargöra). Exempel på utökad ASCII är ISO/IEC 8859-serien av teckenkodningar. De äldre kodningarna i Windows (CP1250, CP1252, CP932, m.fl.) och Mac OS (MacRoman, MacJapanese, m.fl.) är även de utvidgningar av ASCII. Dessa utvidgningar har ersatt ASCII i användning (eftersom 8 bitar är tillgängligt överallt numera), men de följer ASCII för de tecken som ingår i ASCII.
Internet startades med ASCII och 7 bitars överföring som grund, vilket gjorde att 8-bitarskoder inte fungerade på nätet och vissa andra sammanhang, därför skapades nationella 7-bitsvarianter av ASCII i nästan alla länder, även i Storbritannien som behövde pundtecknet £, och i Kanada som ville stödja franska. Dessa standarder kallas ISO/IEC 646. ASCII har samma tecken som referensversionen av ISO/IEC 646 plus 7-bitars styrkoderna i ISO/IEC 6429. Först ett gott stycke in på 1990-talet fungerade 8 bitars överföring av till exempel e-mail överallt på internet.
ASCII-utvidgningarna med 8 bitar håller på att ersättas med Unicode, en teckenkodning som använder fler än 8 bitar, och som stöder alla språk. För att lagra Unicode i filer använder man oftast antingen UTF-8 som fungerar som en utökad ASCII (2-4 bytes för icke-ASCII-tecken), eller UTF-16 där tecknen lagras i 2-byte-sekvenser.
Normtabell
Kodpositionerna 00–1F samt 7F (angivna i det hexadecimala talsystemet) används för olika styrtecken, medan de övriga används för skrivbara tecken.
ASCII | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | |
0x | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1x | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | IS4 | IS3 | IS2 | IS1 |
2x | blank | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4x | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5x | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6x | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7x | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
Styrtecknen utformades på 1960-talet för den tidens behov. Framförallt var det skrivande terminaler (endast tangentbord och skrivare eller elektriska skrivmaskiner med dataanslutning) med hålkortsremsa som styrde utformningen av styrtecknen. Det största problemet som är kvar idag är en otydlighet om hur LF och CR skall användas, vilket skapat olika standarder för textfiler. De skrivande terminalerna krävde CR för att gå längst till vänster och LF för att byta rad, ett av dem i taget på grund av mekaniska begränsningar (operationen krävde väsentligt längre tid än att skriva ut ett enskilt tecken). Bildskärmar har inte det problemet, så man valde till exempel för Multics och Unix att inte ha CR i textfiler, vilket gjorde dem mindre, medan till exempel TRS-80, Apple II och Mac OS Classic valde att lämna bort LF. CP/M, MS-DOS, Windows med flera behöll både CR och LF för radbyte. Detta ger problem vid överföring av textfiler, inklusive mjukvarukällkod, mellan systemen.
Exempel på tillämpningar då styrtecken används:
- 00 (NUL), "Null character", betyder egentligen tecken utan funktion. Kunde användas för att skapa fördröjning i samband med långsamma skrivare. På hålremsor ger tecknet inget hål, varför koden kunde användas för att lämna block att fyllas i senare. Numera avslutar tecknet i textsträng internt i program skrivna i C med flera språk (skrivs '\0' i källkoden i C).
- 03 (ETX), "End of Text", används ofta för att avbryta en process
- 07 (BEL), "Bell", ringning. Klocka på fjärrskrivare, kort pip på terminaler och persondatorer, ibland en blinkning i terminalemulatorer. Klockan fanns tillgänglig på fjärrskrivare för att varna för radslut och används för varningar i många sammanhang.
- 08 (BS), "Backspace", backsteg, backar ett steg, tangent på tangentbordet. Kunde på skrivare användas för att kunna skriva fler tecken i samma position, till exempel stryka under eller stryka över ord. På t.ex. franska och italienska kunde man skapa märken såsom ` och ^ på bokstäver eftersom det är för många sådana kombinationer för att få plats i ASCII. Det fungerade inte utan vidare på bildskärmar så numera används backspace ofta för att radera tecknet före (bakom) markören.
- 09 (HT), "Horizontal tab", tabtecken, gå till nästa tabgräns, finns på tangentbordet.
- 0A (LF), "Line feed", radbyte.
- 0C (FF), "Form feed", sidbyte.
- 0D (CR), "Carriage return", återgång till kolumn 1, används ofta tillsammans med LF.
- 11 (DC1), XON, flödeskontroll: fortsätt sända
- 13 (DC3), XOFF, flödeskontroll: håll upp med sändning
- 1A (SUB), "Substitute", ersätter felaktigt tecken, i tidiga DEC-system, CP/M och MS-DOS (i vissa fall) anger tecknet filslut. I Unix används motsvarande tangentkombination (CTRL-Z) för att tillfälligt avbryta ett program och ge kontrollen till kommandotolken.
- 1B (ESC), "Escape", startar särskild styrkodsekvens för en viss applikation, används till exempel för PCL och kontrollkoder för vt- och ANSI-terminaler.
- 7F (DEL), "Delete", radera, tangent på tangentbordet, raderar ofta tecknet framför (under) markören (jfr backsteg ovan). Ursprungligen "raderat tecken" på hålremsor (hål i alla positioner).
I textfiler (inkl HTML, C och andra dataspråk) förekommer normalt bara HT, LF, CR.
Tecknen 20–7E är skrivbara tecken, dvs. motsvarar en bokstav eller annat tecken, men styr inte teknisk hantering av texten särskilt. Placeringen för tecken som inte är bokstäver eller siffror har i huvudsak styrts av placeringen på dåvarande tangentbord på skrivmaskiner och datorer i USA.
Svensk variant av kodtabell
Eftersom de svenska tecknen saknades så fanns även två svenska varianter, som båda fanns med i standarden ISO/IEC 646. Observera att å, ä och ö inte kommer i svensk bokstavsordning, något som gjorde sortering mer komplicerat och långsammare, men ökade kompatibilitet med norsk/dansk och tysk ISO-646. (Men den komplikationen finns även för engelska, då stora och små bokstäver normalt inte görs primär skillnad på i alfabetisk sortering, även om det lätt implementerades med programkoden x & 0x1F
.) Styrtecknen och tecknen inom 20-3F är samma som ASCII. $ ersattes av ¤.
ISO/IEC 646, svensk variant, endast 20-7F visade | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | |
2x | blank | ! | " | # | ¤ | % | & | ' | ( | ) | * | + | , | - | . | / |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4x | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5x | P | Q | R | S | T | U | V | W | X | Y | Z | Ä | Ö | Å | ^ | _ |
6x | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7x | p | q | r | s | t | u | v | w | x | y | z | ä | ö | å | ~ | DEL |
Det fanns parallellt en variant av den i Sverige, där @ ersatts av É, ^ av Ü, ` av é och ~ av ü för att stödja ord som "idé" och namn med é och ü.
ISO/IEC 646, svensk variant 2, endast 20-7F visade | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | |
2x | blank | ! | " | # | ¤ | % | & | ' | ( | ) | * | + | , | - | . | / |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4x | É | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5x | P | Q | R | S | T | U | V | W | X | Y | Z | Ä | Ö | Å | Ü | _ |
6x | é | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7x | p | q | r | s | t | u | v | w | x | y | z | ä | ö | å | ü | DEL |
De icke-engelska 7-bitarsvarianterna hade sina problem eftersom amerikanska system kunde behöva de tecken som saknas, till exempel vid programmering:
{ a[i]='\n'; }
- blev till
ä aÄiÅ='Ön'; å
Svensk 7 bits-ASCII används delvis fortfarande inom ekonomi och redovisning. Man ser där oftast inga större behov av att stödja andra språk än svenska (och engelska i samband med internationella överföringar). Exempelvis vid överföring av pengar mellan svenska banker fungerar bara A-Ö i texten.