Teckenkodning historik F3 Datarepresentation teckenkodning och datakompression Baudotkod 5-bitars kod för fjärrskrivare (teletype tty). EDAA05 Roger Henriksson Jonas Wisbrant Baudot 1874, Murray 1901 2 EBCDIC ASCII Extended Binary Coded Decimal Interchange Code American Standard Code for Information Interchange (1963) 7-bitars teckenkod ursprungligen utvecklad för fjärrskrivare. 8-bitars IBM-standard som huvudsakligen användes i IBMs stordatorsystem. Idag mest en historisk parantes. Tandbergterminal från tidigt 80-tal. Datavetenskap, LTH. 3 4
Svensk ASCII Olika modifierade 7- och 8-bitars ASCII-kodningar för att representera internationella alfabet. Radslut Radslut representeras med ett (eller flera) specialtecken. Tyvärr inte helt standardiserat. Windows, och flera Internetprotokoll: Carriage Return + Line Feed (ASCII 13 + ASCII 10) Unix, Linux Line Feed (ASCII 10) Observera ordningen på Å, Ä och Ö. Några äldre OS Carriage Return (ASCII 13) nu mest en historisk parantes. 5 6 ISO 8859 En serie 8-bitarsvarianter av ASCII. ISO 8859-1 Latin-1, västeuropeiska ISO 8859-2 Latin-2, östeuropeiska Även för: grönländska (3), kyrilliska (5), arabiska (6), grekiska (7), hebreiska (8), osv Inte heller här har Å,Ä,Ö hamnat rätt Variant med extra tecken i stället för kontrolltecken 7F-AF: Windows-1252. Unicode/ISO 10646 Utvecklat för att klara världens alla skriftspråk. Mer än 100000 möjliga skrivtecken. Skrivs ofta U+XXXX. Varje tecken har en motsvarande sifferkod som i sin tur kan lagras enligt en av flera möjliga kodningstekniker: UTF-8 UTF-16 UTF-32 Man måste alltså hålla isär unicode-teckenkod och hur denna representeras praktiskt. 7 8
UTF-8 Unicodetecken lagras i 1-4 bytes. 7-bitars ASCII-tecken representeras likadant i UTF-8. Ovanligare tecken representeras som en sekvens av flera bytes 2-4. Å = U+00C5! C3 85 (hexadecimalt) Ä = U+00C4! C3 84 (hexadecimalt) Ö = U+00D6! C3 96 (hexadecimalt) U+0080 U+07FF kodas som: 110xxxxx 10xxxxxx Högre teckenkoder på liknande sätt i fler bytes. 9 Byte Order Mark (BOM) Teckensekvens som ofta förekommer i början av Unicodekodade filer som anger kodningsteknik och byte-order. bytes kodning 00 00 FE FF UTF-32, big-endian FF FE 00 00 UTF-32, little-endian FE FF UTF-16, big-endian FF FE UTF-16, little-endian EF BB BF UTF-8 little-endian minst signifikant byte först big-endian mest signifikant byte först 10 Escapetekniker Ibland har man behov att kunna uttrycka tecken som inte direkt kan representeras i den aktuella teckenkodningen, eller som utgör speciella styrtecken. Då använder man sig ibland av s.k. escapesekvenser. Tilldela en strängvariabel i Java ett värde med radslut i. String s = Hello\nWorld! ; \n linefeed (radslut i Unix). Escapesekvenser Vanliga escapesekvenser i Java och flera Unix-verktyg: \r carriage return, ascii 13 \n line feed (new line), ascii 10 \t tab, ascii 9 \\ bakvänt snedtecken (backslash) Ibland kan man även ange teckenkoderna i oktal form: \007 bell Eller som Unicode-koder som i Java: \u000c form feed Beroende på applikation 11 12
Informationsteori Hur man kodar sina data för att åstadkomma robusthet kodningsteknik säkerhet kryptering/autentisering minimal datamängd datakompression Kodningsteknik Tekniker för att upptäcka och rätta fel i överföring och lagring av data. Paritetsbitar jämför hålremsan på övning 1. Felkorrigerande koder Kurser på Institutionen för Elektro- och informationsteknik. Kan Mats fortfarande spela sin CD-skiva efter att han borrat hål i den? 13 14 Kryptoteknik Kryptografi metoder för att förvanska meddelanden så att obehöriga inte kan läsa dem Kryptoanalys metoder för att forcera sådana meddelanden Den klassiska tyska kryptoapparaten Enigma från andra världskriget. Datakompression Informationskällor innehåller ofta mycket redundans. Koda om datainnehållet så att redundansen minimeras och storleken på datainnehållet minskar. destruktiv komprimering man kan ej exakt återskapa källan. Huvudsakligen för bilder, ljud, video. ickedestruktiv komprimering möjligt att exakt återskapa originalet. Program som zip/gzip. - Huffmankodning - Lempel-Ziv-kodning 15 16
Huffmankodning En sekvens av symboler med fix längd byts till en sekvens med varierande längd beroende på symbolernas frekvens. Lempel-Ziv-kodning Letar efter datablock som upprepar sig och ersätter dem med en kod som refererar till den tidigare förekomsten. Alfabet med symbolerna A (60%), B (25%), C (10%), D (5%). Naiv binär kodning: A = 00, B = 01, C = 10, D = 11 Medelmeddelandelängd: 2 0,6+2 0,25+2 0,1+2 0,05 = 2 bitar Huffmankodning: A = 0, B = 10, C = 110, D = 111 Medelmeddelandelängd: 1 0,6+2 0,25+3 0,1+3 0,05 = 1,55 bitar prefixfri kodning! aaababbbaaabaaaaaaabaabb Originalstorlek: 24 8 = 192 bitar Komprimerad storlek: 106 bitar # kod symbol bitar 0 - - - 1 0a a 1+8 2 1a aa 1+8 3 0b b 2+8 4 1b ab 2+8 5 3b bb 3+8 6 2a aaa 3+8 7 3a ba 3+8 8 6a aaaa 3+8 9 2b aab 4+8 10 9b aabb 4+8 17 18