Kapitel 4. Teckenrepresentation. Varf r blir det sõ hõr? s å [SPC] h ä r. s Õ [SPC] h õ r. 4.2 Att ange teckenkodning. 4.

Relevanta dokument
Tecken och teckenrepresentation

Teckenrepresentation. Kapitel Teckenkoder 5.3 ASCII. 5.2 Att ange teckenkodning

Kapitel 4. Teckenrepresentation. 4.2 Teckenkoder. 4.1 Binärt. 4.3 Att ange teckenkodning

Teckenrepresentation. Kapitel Teckenkoder. 4.2 Att ange teckenkodning 4.3 ASCII

Textbearbetning i skalet och man-sidor

F2 Datarepresentation talbaser, dataformat och teckenkodning

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

Program. Kapitel make Program Interpreterande och kompilerande program

Mini-One-Stop-Shop (MOSS) Deklarationsrader i fil. (för inläsning i e-tjänsten)

Mini-One-Stop-Shop (MOSS) Deklarationsrader i fil. (för inläsning i e-tjänsten)

F3 Datarepresentation teckenkodning och datakompression EDAA05 Datorer i system! Roger Henriksson!

F3 Datarepresentation teckenkodning och datakompression

Kapitel 12. Mer om program Att rapportera buggar och problem make

Ännu mer om skalet. Kapitel Kommandorör. 4.2 Texthantering

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Tecken och strängar i Java

Aviseringsfil Filformat

En del länder utger sitt kort i olika språkversioner och därför finns det flera modellkort för dem.

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Stockholms besöksnäring. September 2014

Stockholms besöksnäring. November 2016

14 Internationella uppgifter om jordbruket

14 Internationella uppgifter om jordbruket

14 Internationella uppgifter om jordbruket

14 Internationella uppgifter om jordbruk

Stockholms besöksnäring. December 2016

Stockholms besöksnäring. Juli 2015

Svenska Finska Estniska. Ryska Engelska Koreanska. Franska Tyska Italienska. Grekiska Danska Norska. Isländska Ungerska Spanska

LÄSLANDET - BOKSTÄVER OCH ORD

Antal studiemedelstagare i utlandsstudier per världsdel och land. Källa: CSN (10)

Stockholms besöksnäring. April 2015

Centrala studiestödsnämndens författningssamling

240 Tabell 14.1 Åkerarealens användning i olika länder , tals hektar Use of arable land in different countries Land Vete Råg Korn Havre Ma

Stockholms besöksnäring. November 2014

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

SVENSK STANDARD SS /T1:2006

Stockholms besöksnäring. Augusti 2015

Stockholms besöksnäring. Oktober 2015

Stockholms besöksnäring. Juni 2015

Stockholms besöksnäring. Maj 2015

Antal studiemedelstagare i utlandsstudier per världsdel och land. Källa: CSN (10)

14 Internationella uppgifter om jordbruket

Stockholms besöksnäring. September 2016

14 Internationella uppgifter om jordbruket

14 Internationella uppgifter om jordbruk

Stockholms besöksnäring. Februari 2016

Stockholms besöksnäring. November 2015

Stockholms besöksnäring. Januari 2016

Stockholms besöksnäring. Sommaren 2015

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

Stockholms besöksnäring. Oktober 2016

Stockholms besöksnäring. Maj 2016

Stockholms besöksnäring. Juli 2016

Stockholms besöksnäring. Juni 2016

Stockholms besöksnäring. Augusti 2016

In- och utvandring. 6. In- och utvandrare Immigrants and emigrants Statistiska centralbyrån 289. Tusental 120.

Stockholms besöksnäring. April 2016

Elias Castegren. (Version 1, 2012)

Stockholms besöksnäring. Sommaren 2016

Snabbreferensguide Pro Focus 2202 Färg

Stockholms besöksnäring. Oktober 2014

Välkommen. Snabbstartsinstruktioner. Anslut. Installation. Använd

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Information om ansökan per land

YRKESKOMPETENS (YKB) Implementeringstid för YKB

Landinformation. Uppdaterad

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Mattias Wiggberg Collaboration

Alla företag i EU ska rapportera sin handel med andra EU-länder. I Sverige ska flödet av varor rapporteras till SCB var månad.

14 Internationella uppgifter om jordbruk Internationella uppgifter om jordbruk Kapitel 14 innehåller internationella uppgifter om Åkerarealens

Stockholms besöksnäring. December 2014

Snabbguide AlphaSmart NEO2

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Utlandstraktamenten för 2016

Kort om World Wide Web (webben)

0.2 Skriftväxling med KHIM skall helst ske på det språk på vilket den internationella ansökningen skall inges till WIPO

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Andelen sysselsatta av hela befolkningen större bland flera medborgarskapsgrupper än bland finländare

SKV 278 utgåva 2. Teknisk beskrivning för redovisning med ADB MERVÄRDESSKATT. Kvartalsredovisning

Xemacs, första hjälpen!

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Innehåll. Inledning. Inställningar. Inledning Inställningar Kortkommandon Övriga inställningar Kommandofönstret Övrigt

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes

Copyright 2017 HP Development Company, L.P.

Att skriva på datorn

Kapitel 3. Mer om skalet. 3.1 Kommandorör ( )

C: Skrollhjul D: Batterihållare E: På/Av-knapp F: Anslutningsknapp G: Optisk rörelsesensor. Installation SE

Får jag be om ordet!

Finländska dotterbolag utomlands 2013

Introduktion till datateknik för språkvetare

Finländska dotterbolag utomlands 2016

Integration och grannskap. Hur kan staden hålla samman? Kan företagandet göra skillnad?

Finländska dotterbolag utomlands 2014

En internationell jämförelse. Entreprenörskap i skolan

Kapitel 4 Arkivmenyn Innehåll

Introduktion till datateknik för språkvetare

Nationell webbplats om skatteregistreringsnummer.

Transkript:

Kapitel 4 Teckenrepresentation Temat i detta kapitel är teckenkodningar och locales. 4.1 Teckenkoder När en vanlig text (plain text) lagras i en fil eller ska föras över mellan datorer eller program måste en viss teckenkodning användas, dvs. ett sätt att ge varje tecken en numerisk kod. Filer lagrar olika slags data som en sekvens av bytes, som kan ses som värden 0 255, så det enklaste sättet att lagra text är att varje tecken får en kod från 0 till 255, men för teckenkodningar med många tecken kan det krävas flera bytes för ett tecken. Varf r blir det sõ hõr? s å [SPC] h ä r 115 229 32 104 228 114 s Õ [SPC] h õ r Figur 4.1: Exempel på fel. En text är skriven med vissa koder, men tolkas utifrån andra koder. 4.2 Att ange teckenkodning Det finns många olika teckenkodningar, vilket kan ställa till problem. På samma system (i samma operativsystem; i samma program) använder man oftast samma teckenkodning genomgående och råkar inte ut för några problem. Trycker man på en tangent som det står Å på får man naturligt nog ett tecken Å på skärmen och sparar man det i en fil så kommer samma tecken fram nästa gång man tittar på det. Det besvärliga kommer istället när man ska föra över data mellan system som använder olika teckenkodningar. Då finns det risk för att den kod man skickar iväg som betyder Å i ens egen system betyder nåt annat på det andra systemet. Det är därför viktigt a) att man använder en teckenkodning som mottagande system känner till, och b) att man talar om vilken teckenkodning man har använt. Då får mottagaren(s system) möjlighet att tolka informationen rätt. Oftast fungerar sånt automatiskt. Detta görs med standardiserade beteckningar för olika teckenkodningar, och det är organisationen IANA (Internet Assigned Numbers Authority) som håller i dessa beteckningar, precis som de håller i flera andra standarder som används på Internet. I flera sammanhang när text skickas över nätet, t. ex. för datorpost och över webben, så används dessa standardiserade beteckningar, så istället för att bara texten skickas över så skickas det även med en bruksanvisning som talar om vad det är för slags text så att mottagaren vet hur det ska tolkas. Normalt ordnar sig sådant automatiskt, men ni kan ändå då och då stöta på tillfällen när ni måste kunna hantera detta. 41

4. TECKENREPRESENTATION 4.3 ASCII En traditionell teckenkodning med stor genomslagskraft är ASCII (American Standard Code for Information Interchange). Med beteckningar från IANA kan den bland annat kallas ASCII eller US-ASCII. (Det finns ofta flera IANA-namn på samma teckenkodning.) Den omfattar koder från 0 till 127 och visas i figur 4.2. ASCII är en amerikansk och internationell standard från 1960-talet (dagens version är i praktiken ekvivalent med den från 1968) som snabbt antogs av de flesta 1 och som fortfarande används ofta. Observera att ASCII-koderna går från 0 127, medan det i en byte finns plats för dubbelt så många värden (256). Det är därför lätt att göra utökningar av ASCII där koderna 128 255 används till ytterligare tecken, och det finns också en stor mängd sådana utökningar. I många fall kan man höra även sådana teckenkodningar kallas för ASCII eller»extended ASCII«. Det blir lätt förvirring med teckenkoder om samma namn används om flera olika saker så kalla bara ASCII för ASCII och använd specifika namn för de olika utökningar av ASCII som finns! 4.4 Kontrolltecken och nyrad Kontrolltecken är sådana tecken som inte motsvarar något grafiskt tecken som kan skrivas ut på papper eller på en skärm, utan istället är en kod som har någon särskild annan betydelse när en text lagras i en fil, när tecken ska skickas från en terminal till en dator eller från en dator till en terminal eller liknande. I ASCII är tecken 0 31 samt 127 kontrolltecken. Några har effekten att flytta på markören. Här är de viktigaste: 9, [HT] = Horizontal tabulation:»advances the active position to the next pre-determined character position on the same line«(= TAB) 10, [LF] = Line feed:»advances the active position to the same character position of the next line«13, [CR] = Carriage return:»moves the active position to the first character position on the same line«1 Ett viktigt undantag var IBM som länge istället använde sina egna EBCDIC-teckenkodningar. Med beskrivningarna ovan behövs två tecken för att en text ska fortsätta på början av nästa rad: [CR] och [LF]. [CR] (vagnretur) för att börja skriva på början av raden och [LF] (radframmatning) för att gå fram till nästa rad. Konventionellt ges dessa i just den ordningen [CR] + [LF] och kombinationen kallas ibland tillsammans för CRLF. I Unix används dock bara ett tecken, [LF], för att börja på en ny rad, så man har tolkat om detta teckens betydelse. Det brukar då kallas för newline och betecknas ibland som \n. MS Windows använder däremot det traditionella [CR]+[LF] och det brukar även krävas vid kommunikation mellan datorer på nätet. 2 Dessutom är det vanligt i en del sammanhang att en sådan kod som ursprungligen används för att beteckna ny rad (oavsett vilken variant man använder) istället används för att indikera nytt stycke. Dessa skillnader gör att vanliga textfiler faktiskt kan skilja sig åt mellan olika system även om båda använder ASCII. Kontrolltecknet [HT] ovan kallas oftare för TAB och har en egen tangent på tangentbordet. Ett annat kontrolltecken som har en egen tangent är [ESC] (Escape, tecken 27) som används till många olika saker. I övrigt kan man skicka kontrolltecken från terminalen genom att använda Ctrltangenten. Med Ctrl-A skickar man tecken 1, Ctrl- B ger tecken 2, osv., och i en del sammanhang betecknas dessa tecken med ^A, ^B osv. Eftersom J är den tionde bokstaven är alltså ^J tecken 10, dvs. [LF] (line feed, newline). Om man vill lägga in ett kontrolltecken i en fil i Emacs räcker det inte med att bara trycka så. Om man trycker t. ex. C-a så betyder det istället att gå till början av raden, osv. Då får man lov att använda kommandot C-q (med q som i»quote«) före tecknet, så med C-q C-a lägger man in kontrolltecken nummer 1, osv. 4.5 ISO 8859-* Eftersom ASCII har fått sådan genomslagskraft kan man vara rätt säker på att A är kodat som 65, B som 66 osv. som i figuren i nästan alla sammanhang, 2 I Mac-världen användes förr istället endast [CR] för denna funktion, men eftersom Mac OS X är en Unix så använder moderna Mac-datorer också [LF]. 42

4.6. Microsoft Windows 32 33! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44, 45-46. 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 & 93 ] 94 ^ 95 _ 96 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 125 } 126 ~ 127 DEL Figur 4.2: ASCII-tecken 32 127. Kod 32 är mellanslag. Kod 127 är inte ett egentligt tecken utan»kontrolltecknet«delete. Även kod 0 till 31 är olika kontrolltecken som inte visas ovan. trots att detta egentligen är rätt godtyckligt och hade kunnat vara på något annat sätt. Men i ASCII finns bara ungefär de tecken som finns på en amerikansk skrivmaskin. När det gäller andra tecken kan man var inte vara lika säker, och det finns en mängd olika teckenkodningar att välja på med olika uppsättningar tecken i. Den internationella standardiseringsorganisationen ISO har definierat en serie standardiserade teckenkodningar ISO 8859-1, ISO 8859-2,... ISO 8859-16 3, och några av dessa, i synnerhet den första, används mycket. Hos IANA finns dessa registrerade som ISO-8859-1, ISO-8859-2 osv. De är alla utökningar av ASCII, dvs. är ekvivalenta med ASCII för kod 0 till 127. I figur 4.3 visas tecken som lagts till ISO-8859-1. Hela ISO 8859-serien ser ut så här: ISO 8859-1 (Latin1) västeuropeiska språk ISO 8859-2 (Latin2) central- och östeuropeiska språk med latinska alfabet (med t. ex. Ł, ś, ž) ISO 8859-3 (Latin3) sydeuropeiska språk ISO 8859-4 (Latin4) nordeuropeiska språk ISO 8859-5 kyrilliskt alfabet ISO 8859-6 arabiskt alfabet ISO 8859-7 grekiskt alfabet ISO 8859-8 hebreiskt alfabet ISO 8859-9 (Latin5) turkiska ISO 8859-10 (Latin6) nordiska språk ISO 8859-11 thai ISO 8859-13 (Latin7)»Baltic rim«iso 8859-14 (Latin8) keltiska språk ISO 8859-15 (Latin9) en revidering av Latin1 ISO 8859-16 (Latin10) sydösteuropeiska språk 3 Utom ISO 8859-12 som inte finns. De flesta kommer antagligen bara att behöva befatta sig med Latin1-filer av dessa. Observera att de som är till för latinskt alfabet även kallas Latin nummer, i synnerhet är Latin1 = ISO-8859-1. Observera även att eftersom alla dessa innehåller hela ASCII så finns sådant som de latinska bokstäverna A Z även i de teckenkodningar som framförallt är till för helt andra alfabeten. 4.6 Microsoft Windows Microsoft har använt en del egna utökningar av ISO-8859-familjen. Den viktigaste av dessa är windows-1252 som bygger på Latin1. Den innehåller alla skrivtecken som Latin1 gör, men ersätter en del av kontrolltecknen 128 159 med ytterligare skrivbara tecken, t. ex. C,,, ž och Ÿ, som inte finns med i Latin-1. Den kallas ibland även för WinLatin1, men windows-1252 är det enda namn för denna teckenkodning som Microsoft har registrerat hos IANA. I MS Windows-världen kallas denna teckenkodning märkligt nog ibland för»ansi«(såsom den amerikanska standardiseringsorganisationen American National Standards Institute), trots att det inte är någon ANSI-standard! Eftersom den liknar Latin1 så mycket finns det risk för sammanblandning. Ibland sprids dokument från MS Windows-världen med felaktiga etiketter som påstår att texterna är skrivna med Latin1 fast det egentligen är windows-1252 vilket kan ställa till med problem. 4.7 ISO 10646 = UCS Unicode Förutom ovanstående finns det även en stor mängd andra teckenkodningar som används eller har an- 43

4. TECKENREPRESENTATION 160 161 162 163 164 165 166 167 168 169 170 ª 171 «172 173-174 175 176 177 ± 178 2 179 3 180 181 µ 182 183 184 185 1 186 º 187» 188 ¼ 189 ½ 190 ¾ 191 192 À 193 Á 194 Â 195 Ã 196 Ä 197 Å 198 Æ 199 Ç 200 È 201 É 202 Ê 203 Ë 204 Ì 205 Í 206 Î 207 Ï 208 Ð 209 Ñ 210 Ò 211 Ó 212 Ô 213 Õ 214 Ö 215 216 Ø 217 Ù 218 Ú 219 Û 220 Ü 221 Ý 222 Þ 223 ß 224 à 225 á 226 â 227 ã 228 ä 229 å 230 æ 231 ç 232 è 233 é 234 ê 235 ë 236 ì 237 í 238 î 239 ï 240 ð 241 ñ 242 ò 243 ó 244 ô 245 õ 246 ö 247 248 ø 249 ù 250 ú 251 û 252 ü 253 ý 254 þ 255 ÿ Figur 4.3: Tecken 160 255 i ISO-8859-1. Tecken 160 är nbsp = non-breaking space. Tecken 173 är shy = soft hyphen en möjlig avstavningspunkt där - ska visas om det blir avstavning där, men som annars inte syns. vänts. De ovanstående klarar ju t. ex. bara alfabetisk skrift, och inte stavelsetecken som hangul för koreanska och hiragana och katakana för japanska, eller ideografiska tecken för bl. a. kinesiska, japanska och koreanska. Det enklaste vore på många sätt att alltid samma teckenkodning i alla sammanhang, och bit för bit är världen på väg dit. Numer så används teckenkodningen Unicode allt mer, såväl under Unix som Microsoft Windows och annars. Med det är det tänkt att man ska kunna beteckna alla naturliga språk (levande och döda), samt dessutom en stor mängd matematiska och andra symboler. Egentligen finns det två olika projekt: Det ena är en standard från standardiseringsorganisationen ISO: UCS = Universal Character Set, eller ISO 10646. Det andra är Unicode från ett konsortium av datorföretag. De båda standarderna har dock anpassat sig till varandra, så i de flesta bemärkelser är det numer samma sak och det är Unicode som det oftast talas om. Nuvarande versionen Unicode 5.1.0 har över 100 000 koder (däribland över 70 000 ideografiska tecken) Standarden utökas allteftersom med nya tecken. Det finns plats för drygt en miljon tecken. Koderna 0 255 är som för Latin1 (så 0 127 är som för ASCII). Koderna upp till 65 535 kallas för Basic Multilingual Plane (BMP), och där ligger det som används oftast. Högre koder används mest till lite ovanligare ideografiska tecken och utdöda skriftsystem. Förutom den numeriska koden innehåller Unicode även bland annat Ett namn för varje tecken (som LATIN CAPI- TAL LETTER A WITH RING ABOVE, ARABIC QUESTION MARK och ORIYA DIGIT SEVEN) Information om vad för slags tecken de olika tecknen är (alfabetiska, siffror, interpunktion,... ) Information om vilka tecken som skrivs från höger till vänster och vilka som skrivs från vänster till höger Information om vilka tecken som motsvarar varandra som små och stora bokstäver 4.7.1 UTF-8 Eftersom det finns långt fler än 256 tecken krävs det flera bytes per tecken. Detta är ett skäl till att Unicode är besvärligare att hantera än t. ex. ASCII och Latin1. För att spara utrymme så lagrar man ofta Unicode-text på ett sådant sätt så att olika tecken tar olika mycket plats att lagra. Det finns flera sätt att göra detta, varav ett heter UTF-8. Där tar tecken mindre plats att lagra ju lägre kod de har: Kod 0 127: 1 byte (ASCII) Kod 128 2 047: 2 bytes Kod 2 048 65 535: 3 bytes Kod 65 536 1 114 111: 4 bytes (utanför BMP) Om en fil bara innehåller ASCII-tecken (kod 0 127) så blir det alltså precis likadant med US-ASCII som med UTF-8. Endast koderna 128 255 används i flerbyteskombinationerna, så varje förekomst av t. ex. kod 65 i ens fil är samma ASCII-tecken (A). Kommunikation över Internet använder allt oftare UTF-8. I figur 4.4 visas hur UTF-8 i december 2007 blev det vanligaste sättet att koda texter på webben. Om man ser text som ser ut»sã hã r«så är det på grund av trassel med teckenkodning. Så ser UTF-8-text ut om den tolkas som Latin1. Observera att bokstäverna a z ser likadana ut (de ingår ju i ASCII) medan åäö lagras i två bytes var med UTF-8 och dessa två bytes har här felaktigt tolkats som något helt annat. 44

4.8. Vad är olika tecken? s å [SPC] h ä r 115 229 32 104 228 114 115 195 182 32 104 195 165 114 Figur 4.5: En kort text med Unicode-koder samt dess representation som UTF-8. Observera hur vissa tecken då tar upp två bytes. 4.8 Vad är olika tecken? Figur 4.4: Från att ha varit det absolut vanligaste har användningen av ren ASCII har gått ner skarpt. Ett tag var det mest genom att Latin1 och windows-1252 steg, men sedan några år minskar dessa också, och det är UTF-8 som gäller. Varfà r blir det sã hã r? Figur 4.6: Exempel på fel. Här har en text skrivits med UTF- 8, men tolkats som om det vore Latin-1. Det är inte i första hand det grafiska utseendet som avgör vad som ska räknas som varianter av samma tecken eller som ska räknas som olika tecken. T. ex. är a och a samma tecken (I Unicode LATIN SMALL LETTER A, tecken 97) trots att de ser olika ut. Däremot är svenska A och grekiska A olika tecken (tecken 65: LATIN CAPITAL LETTER A respektive tecken 913: GREEK CAPITAL LETTER ALPHA) trots att de (beroende på typsnitt) kan se likadana ut. (Att de är olika märks om inte annat på motsvarande gemena bokstäver a och α.) Samma tecken kan också se olika ut i olika positioner i texten. Ett f följt av ett i blir t. ex. ofta en sammanhängande ligatur fi (se på nära håll!), men det räknas ändå som två olika tecken. Många arabiska tecken har olika former beroende på om de kommer i början, mitten eller slutet av ett ord. Termen glyf används ibland för ett specifikt grafiskt utseende, till skillnad från den mer abstrakta termen tecken. 4.8.1 Flera tecken räknas som samma Är $ och Š två olika tecken eller är det två olika grafiska utseenden av samma tecken»dollar«? Det beror på. Med Unicode finns det möjlighet att göra alla åtskillnader som görs när man sätter text i tryck, men med t. ex. ASCII är det mer som att skriva på en skrivmaskin och då finns inte alls så många olika tecken. I ASCII finns t. ex. bara ett tecken - trots att man i tryck skiljer på olika långa sådana streck t. ex. i abc-bok (kortare bindestreck) och kl. 13 15 (längre intervalltecken). Ett exempel som förtjänar särskild uppmärksamhet är citattecken. På t. ex. engelska så används olika 45

4. TECKENREPRESENTATION quote quote Figur 4.7: Hur tecknen för startcitat och slutcitat skiljer sig åt skiljer sig i olika typsnitt. De två exemplen här är Helvetica och Palatino. citattecken före och efter citat. Det kan se ut like this eller like this. Hur skillnaden ser ut skiljer sig åt i olika typsnitt. I figur 4.7 finns ett par rätt olika exempel. På skrivmaskiner nöjde man sig dock med raka neutrala citattecken som skulle gå lika bra att använda både före och efter, och så är det i ASCII och t. ex. Latin1 också: "like this" eller 'like this'. (Citattecknen är tecken 34 och 39 i figur 4.2.) I ASCII finns det dock även grav accent (tecken nummer 96 i figuren). Ibland kan man stöta på text som använder den som citatstart så det är skrivet `like this'. Detta ser rätt skevt ut, och är inte att rekommendera, men förr fanns det en hel del fonter där tecknet ' inte var rakt, utan vinklat, så då såg det helt OK ut. En apostrof, som i»don t«är samma tecken som ett slutcitattecken. I Unicode beskrivs tecknet som RIGHT SINGLE QUOTATION MARK, men det görs ändå klart att detta är att föredra även för apostrof. På svenska används för övrigt detta tecken både före och efter citat: så här. Programspråk använder sällan tecken utanför ASCII i speciella betydelser, så källkod till program innehåller vanligtvis bara ASCII utom kanske i textsträngar och kommentarer. 4.9 Språkinställningar En fil med vanlig text har i allmänhet ingen information i sig om vilken teckenkodning den använder. En fil med två bytes, 241 och 214, kanske är en Latin1-fil med texten»ñö«, eller kanske en ISO-8859-7-fil med de grekiska bokstäverna»ρφ«eller kanske en ISO-8859-5-fil med de kyrilliska bokstäverna» ж«4 eller något helt annat! Program som gör något med textfiler måste ofta veta vilken teckenkodning de är lagrade med. Om sort ska kunna sortera en fil med en sådan rad så 4 Vilket betyder igelkott på ryska! spelar det ju t. ex. roll om första tecknet där är ñ vilket antagligen ska sorteras likadant som n. Dessutom måste de ibland veta vad det är för språk för att rätt kunna behandla en text. Dessa inställningar kallas för ens locale och man har standardinställningar för detta som gäller om man inte säger till om annat. Dessa inställningar kan även ändra vilket språk program ska använda i sin output ifall programmet har översatts till flera olika språk. Programmet läser av användarens språkinställningar och ändrar beteende utifrån det. Ibland kan det vara så att ett program bara delvis är översatt så att vissa texter fortfarande kommer att vara oöversatta. De som skriver programmet har kanske lagt till en ny meny som de andra personer som översätter alla dess texter till svenska inte har hunnit översätta än, och då får just den menyn en engelsk text även när övriga är på svenska. Tycker man att en sådan blandning är störande kan det vara trevligast att köra på engelska som det är från början. En annan fördel med engelska är att det är så vanligt. Om man råkar ut för ett konstigt felmeddelande som man inte begriper kan det ofta vara instruktivt att söka på nätet efter andra som har råkat ut för samma fel. Om man då söker på den engelska versionen av meddelandet är det oftast störst chans att man hittar sådant. 4.9.1 Språkinställning i Gnome Om du normalt vill att datorn ska prata svenska med dig (eller något annat språk) så kan du ställa om språk från inloggningsrutan innan du loggar in. (Du får en fråga om det bara är under just denna session du vill använda detta språk eller om du vill ändra så att detta blir det normala för dig.) 4.9.2 Hur en locale ser ut En angivelse av locale kan se ut i stil med pt_br.iso8859-1 vilket betyder brasiliansk portugisiska kodat enligt Latin1. Först kommer en beteckningen för vilket språk det är. I förra kapitlet, på sidan 37, finns en lista över några av dessa språk. Till detta fogas även vilket land det gäller. Landskoderna kan man t. ex. känna igen från toppdomänerna på Internet där.se är Sveri- 46

4.9. Språkinställningar Tabell 4.1: Koder enligt ISO 3166-1 för några av världens och Europas största länder, samt de skandinaviska länderna BD BE BR DK EG ET PH FI FR GR IN ID IR IS IT JP CN MX NL NG Bangladesh Belgien Brasilien Danmark Egypten Etiopien Filippinerna Finland Frankrike Grekland Indien Indonesien Iran Island Italien Japan Kina Mexiko Nederländerna Nigeria NO PK PL PT RO RU RS ES GB SE TH CZ TR DE US UA HU VN BY AT Norge Pakistan Polen Portugal Rumänien Ryssland Serbien Spanien Storbritannien Sverige Thailand Tjeckien Turkiet Tyskland USA Ukraina Ungern Vietnam Vitryssland Österrike ge osv. 5 I tabell 4.1 återges en del av landskoderna. Dessa standarder är reglerade av den internationella standardiseringsorganisationen ISO. Både språk och land anges alltså. Några exempel: sv_se : Svenska i Sverige sv_fi : Finlandssvenska en_gb : Brittisk engelska en_za : Sydafrikansk engelska es_es : Spanska i Spanien es_ar : Spanska i Argentina fr_ca : Franska i Kanada zh_cn : Kinesiska i Kina zh_tw : Kinesiska i Taiwan Och så kan till detta tillkomma en punkt och en teckenkodning, t. ex..iso8859-1 eller.utf-8. (Det finns även locales som har andra slags namn.) I många fall spelar det ingen roll vilket land man anger. Det är nog t. ex. knappast många program som beter sig olika om man har talat om att man vill ha rikssvenskt eller finlandssvenskt beteende. Det betyder inte att man kan sätta ihop lands- och språkbeteckningar hur som helst i en locale. Med kommandot locale -a listas alla giltiga locales. 5 I det sammanhanget används dock inte förkortningen GB för Great Britain, utan.uk för United Kingdom, och.us används inte så mycket. 4.9.3 Att sätta om locale temporärt Med LANG= locale kommando kan man utföra ett kommando med en annan locale än ens normala. Så t. ex. $ LANG=fr_FR.utf8 ls x ls: x: Aucun fichier ou répertoire de ce type $ LANG=es_ES.utf8 cal octubre 2007 do lu ma mi ju vi sá 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $ LANG=fi_FI.utf8 wc *.txt 4552 35715 235593 ivt2-svenska.txt 40 317 2106 rummet.txt 3594 26461 148488 wonderland.txt 8186 62493 386187 yhteensä Kommandot cal ger en liten kalender. Observera hur både vanlig output och felmeddelanden kommer på det angivna språket. (I det sista exemplet märks det bara på»yhteensä«istället för»total«.) 4.9.4 Sortering Hur text ska sorteras är språkspecifikt. På svenska sorterar vi åäö i slutet av alfabetet, medan t. ex. tyskarna som också använder ä och ö sorterar dessa som a och o. I uppgift 3.27 sorterade du svenska ord men eftersom dina språkinställningar var engelska så fick du en engelsk sortering där åäö sorteras som aao utan avseende på på prickarna och ringen ovanför, precis som vi sorterar tecken som éèêë likadant som vanligt e. Genom att sätta om LANG ändras även dock även hur sort sorterar. Här sorteras samma rader två gånger, först på svenska och sedan på engelska: $ LANG=sv_SE.utf8 sort /tmp/fil citron zebra åsna äpple 47

4. TECKENREPRESENTATION $ LANG=en_US.utf8 sort /tmp/fil äpple åsna citron zebra Sorteringsreglerna kan vara rätt komplicerade. Vissa tecken ska behandlas likadant som andra. Vissa tecken ska ignoreras helt. Ibland ska vissa teckenkombinationer behandlas särskilt. Traditionellt har t. ex. ch sorterats som en särskild bokstav på spanska och inte som c+h. 6 När meningen med sortering bara är att föra samman likadana rader är det onödigt att använda så komplicerade sorteringsregler som naturliga språk ofta har. Då kan man använda en särskild locale»c«vilket ger enklast möjliga sortering. Raderna jämförs bara tecken för tecken enligt vilka numeriska koder dessa tecken har. (Det innebär t. ex. att stora och små bokstäver sorteras olika.) Om det är en stor fil kan man märka att en sådan sortering kan gå mycket snabbare. 4.9.6 Hur ett skalkommando ser ut Med denna nya ingrediens i skalkommandona är vår nuvarande sanning om hur de ser ut så här: Ett helt kommandorör består av en mängd kommandon avskilda av lodstreck ( ). Det första kommandot kan följas av < filnamn och det sista kommandot kan följas av > filnamn. Varje individuellt kommando i ett sådant kommandorör kan enligt tidigare se ut som kommandord väljare argument, men dessutom kan det alltså tillkomma LANG= nånting i början. Detta hör då bara till just det kommandot och inte till ett helt kommandorör. Om man i ett längre kommandorör vill ha en sortering med t. ex. locale C blir det alltså... LANG=C sort... och det är då bara sort som körs med annan locale än den normala. Kommandon tidigare och senare i kommandoröret påverkas inte. 4.9.5 När använda detta? I de flesta fall kommer du inte behöva bry dig om dessa språkinställningar. Du kommer knappast ha nån nytta av att köra wc på nederländska en specifik gång så att det står»totaal«i summeringsraden istället för»total«, utan det räcker med att en gång för alla tala om vilket språk du ha. Ett viktigt undantag är sortering. Du bör tänka på hur sorteringar sker och veta hur du kan ställa om LANG för att få olika sorteringar, inklusive den rent»datoriska«med LANG=C som inte tar hänsyn till något särskilt språks sorteringsregler. Det gäller förstås också att sätta teckenkodningen rätt! Om en fil är lagrad i Latin1 betyder det bl. a. att koden 224 där betyder à och att koden 227 betyder ã. (Se figur 4.3!) Om dessa tecken ska sorteras likadant så måste sort till att börja med veta teckenkodningen. Annars har den ingen anledning att behandla 224 och 227 likadant. 6 Detta ändrades dock vid en reform 1994. 4.10 Olika teckenkodningar i Emacs Emacs kan läsa och skriva filer med flera olika teckenkodningar. Ofta kan den gissa rätt på vilken teckenkodning en viss fil är skriven med. Alla buffertar i Emacs får innehålla vilka tecken som helst som Emacs kan hantera. Det är först när man försöker spara en fil som det krävs att alla tecken i bufferten finns med i den teckenkodning som man ska spara filen med. Om det inte är så talar Emacs om detta och låter en välja en annan teckenkodning. Man kan också tala om explicit vilken teckenkodning man vill använda innan man sparar genom att använda C-x RET f. Till vänster i informationsraden anger Emacs vilken teckenkodning som i första hand ska användas när en viss buffert sparas till fil (1 = ISO-8859-1, U = Unicode,... ). Detta kommando finns även i en meny Options Mule (Multilingual environment) Set Coding Systems, där det även finns besläktade kommandon, t. ex. för att tala om uttryckligen vilken teckenkodning en fil har ifall Emacs gissar fel. 48

4.13. Hos oss 4.11 Att konvertera mellan teckenkodningar Ett program som konverterar mellan teckenkodningar är iconv. Det kan användas som iconv -f latin1 -t utf-8 foo.txt för att konvertera filen foo.txt från Latin1 till UTF8 och skriva ut resultatet till standard output. Om man utelämnar argumentet tas input istället från standard input. Man kan ange namn på teckenkodningarna på lite olika sätt. Istället för»latin1«kan man skriva t. ex.»iso-8859-1«eller»iso8859-1«. Default, dvs. vad som händer om man inte säger till om något annat, är att ens normala teckenkodning (enligt ens locale) används, så om man inte använder väljaren -f omvandlar iconv från ens vanliga teckenkodning, och om man inte använder väljaren -t omvandlar iconv till ens vanliga teckenkodning. Ett annat sätt att konvertera är att öppna filen i Emacs och så spara den igen efter att man ställt om teckenkodning. 4.12 Skriva i Emacs Om man vill skriva helt andra tecken i Emacs, som t. ex. ryska eller kinesiska tecken så behöver man en särskild inputmetod. Annars behöver man inte detta. Inputmetoden definierar vilka tecken som genereras när man trycker på olika tangenter. Funktionen Select Input Method finns i menyn Options Mule (Multilingual environment) och där finner man även ett kommando för att beskriva en viss inputmetod (C-h I). Det finns olika slags inputmetoder. T. ex.: Prefix- och postfixmetoder där man framförallt kan skriva bokstäver med accenter genom att skriva något särskilt före respektive efter bokstaven. Inputmetoden german-prefix är t. ex. till för att skriva tyska även om man inte har ett tyskt tangentbord och gör därför så att "A genererar Ä men även så att "s genererar ß. Metoder som bygger på tangentbordslayouter. Om man t. ex. kan layouten på ett vanligt ryskt tangentbord, kan man använda inputmetoden cyrillic-jcuken för att tangenterna ska generera det kyrilliska tecken som tangenten på motsvarande position ger på ett ryskt tangentbord. Metoder som bygger på translitterering. Med cyrillic-translit trycker man t. ex. på tangenterna»shostakovich«för att skriva»xostakoviq«. 7 För att skriva ideogram, t. ex. kinesiska, finns det dels inputmetoder där man först anger ordets fonetik, dels sådana där man först anger några av delarna i det grafiska tecknet. I båda fallen finns det i allmänhet flera möjliga tecken som kan passa in. Man får upp en lista över sådana från vilken man får välja. 4.13 Hos oss På våra GNU/Linux-datorer har vi använt en_us.utf-8 som ens normala locale sedan sommaren 2007, dvs. amerikansk engelska kodad med UTF-8. Tidigare använde vi Latin1 som normal teckenkodning. Bara för att man har en viss locale som standard så hindrar det inte en från att även hantera filer med andra teckenkodningar, och ni kommer att märka att många textfiler hos oss fortfarande är lagrade med Latin1. Om man skriver en locale utan angivande av teckenkodning, som t. ex. bara sv_se så betyder det än så länge inte en locale där UTF-8 används, så skriv uttryckligen sv_se.utf8 osv. när det är det du menar! 7 Detta följer en engelsk translitterering. På svenska skulle man oftast skriva»sjostakovitj«, och i vetenskapliga sammanhang translittererar man»šostakovič«. 49

Laboration 4: Teckenkodningar Redovisning När ett skalkommando efterfrågas ska du ge eventuell output från det kommandot också. Gör först cd introduktion-till-datateknik och ha sen den katalogen som aktuell katalog vid alla skalkommandon du ger i denna labb! Skicka svar till Per senast fredagen den 18 september. Tecken och bytes Hittills har du bara räknat ord och rader med wc, men det kommandot kan även räkna tecken. Väljaren -c har traditionellt använts till detta, men eftersom den funnits med sedan urminnes tider så räknar den helt enkelt antal bytes. Uppgift 4.1 Ge ett kommando för att räkna antal bytes i filen konto.txt som ligger i din hemkatalog. (Missa nu inte vad som står om aktuell katalog i reglerna under Redovisning ovan! Du ska inte stå i den katalog där den filen ligger, utan skriva en relativ sökväg som går upp ett steg.) Med nyare kodningar som UTF-8 kan antalet bytes och tecken skilja, och i operativsystemet GNU har wc fått en ny väljare som förstår sig på sånt och verkligen räknar tecken. Se med wc --help vad den väljaren heter. Uppgift 4.2 Ge ett kommando som räknar antal tecken i den där filen konto.txt. Uppgift 4.3 Hur stor skillnad blev det i bytes och tecken? Varför just så stor? Teckenkodningar i Emacs Det finns en textfil i katalogen ~ellen/ fotografier. Gör cat på den i skalet. (Använd komplettering för att se vad filen heter.) Några tecken kommer inte att visas rätt, eftersom den filen inte är kodad enligt UTF-8. Kopiera den filen till din kurskatalog. Öppna nu din kopia av filen i Emacs. Emacs känner igen vad det är för teckenkodning och visar därför alla bokstäver rätt. Uppgift 4.4 Vad är det för teckenkodning och hur kan du se i Emacs att det är det? Använd Options Mule Set Coding Systems For Saving This Buffer eller C-x RET f för att ange vilken teckenkodning du vill att denna fil ska ha och svara utf-8. Spara filen. Du har nu omvandlat den filen till UTF-8. (Kolla för säkerhets skull med cat i terminalen också.) Öppna /local/kurs/ids/rysk.txt i Emacs. Som man kan gissa av namnet så innehåller den en text på ryska med kyrillisk skrift. Emacs gissar dock fel på vad det är för kodning av den filen så tecknen ser inte alls ryska ut. Uppgift 4.5 Vad har Emacs gissat att det är för teckenkodning och hur kan du se det? I ett sånt här läge finns det ett särskilt kommando för att genast öppna om samma fil men då tala om vad det är för teckenkodning i den. Sök upp det kommandot i Emacs-menyerna i samma meny som nyss. Använd det kommandot för att öppna om denna fil. Ange den teckenkodning i ISO 8859-serien som är till för kyrillisk skrift. 50

Olika locale Uppgift 4.6 Vad heter den teckenkodningen och hur visas den i informationsraden i Emacs? Uppgift 4.7 Sök upp första ordet i den filen i Google. En tidig träff är i ryska Wikipedia. I vänsterspalten i Wikipedia finns länkar till motsvarande sidor i Wikipedia till andra språk. Vad heter denna figur på svenska? Inputmetoder i Emacs Öppna en ny fil uttal.txt där du ska skriva lite fonetisk skrift med uttalsangivelser enligt IPA. Skriv»Di Int@næS@n@l f@netik @sousi"eisn«. Det är inte helt lätt. Många av de där tecknen finns inte på tangentbordet. Lös detta genom att ange en särskild inputmetod i Emacs med Options Mule Select Input Method. Välj metoden ipa. Att du har detta aktiverat visas med IPA i informationsraden. Nu tolkar Emacs det du skriver på ett lite speciellt sätt som ska underlätta att skriva IPA. T. ex. kan första tecknet D skrivas med»dh«. Med C-h I (versalt I!) får du en beskrivning av en inputmetod. Tryck på retur för att få just denna inputmetod beskriven så får du veta hur du kan skriva de övriga speciella tecknen i denna text. Märk medan du skriver att det i ekoarean framgår vad det finns för möjligheter. iconv Uppgift 4.8 Ge ett iconv-kommando för att direkt skriva ut filen i uppgift 4.4 kodad med UTF-8 i terminalen. Filen /local/kurs/ids/nordic-authors.txt innehåller namnen på några nordiska författare, listade en per rad med efternamn först. Uppgift 4.9 Vilken teckenkodning använder den filen? Uppgift 4.10 Ge ett skalkommando som sparar en ny fil authors.txt som innehåller /local/kurs/ ids/nordic-authors.txt omvandlad till UTF-8. (Om du har gjort rätt ska filen se rätt ut t. ex. om du tittar på dess innehåll med cat.) Olika locale Se noga upp med att du skriver locale-namnen rätt i dessa uppgifter! Skriver man fel blir det inget felmeddelande, utan bara ett felaktigt resultat! Uppgift 4.11 Med locale -a kan man lista alla giltiga locales. Hur många sådana finns det? Uppgift 4.12 Vilka giltiga locales finns det för USA här? Vilka språk använder dessa? Uppgift 4.13 Ta fram aktuell tid (med date) med isländsk locale. Vad gav du för kommando och vad blev det för resultat? Uppgift 4.14 Ge ett kommando för att sortera din nya fil authors.txt med svensk locale. På svenska har traditionellt v och w sorterats som samma bokstav, men numer vacklar bruket. Senaste upplagan av Svenska Akademiens ordlista förespråkar att w sorteras för sig, som en egen bokstav, medan bl. a. Svenska språknämnden rekommenderar att man fortsätter att sortera samman v och w. Uppgift 4.15 Hur beter sig svensk sortering här vad gäller v och w? Uppgift 4.16 Ge ett kommando för att sortera samma författarlista med dansk sortering! Nämn alla skillnader som det blir då jämfört med svensk sortering! Du har sedan förra labben en fil rummet.words i din kurskatalog. Uppgift 4.17 Ge ett kommando som ger en lista över de tio sista orden i en svensksorterad lista över raderna i rummet.words, samt resultatet. Några rader där är dubbletter. Det finns ett kommando uniq som man kan använda som filter för att ta bort dubblettrader som kommer efter varann i en input. Uppgift 4.18 Ge ett kommando som ger en lista över de tio sista orden i en svensksorterad lista över raderna i rummet.words där dubbletter tagits bort, samt resultatet. 51

LABORATION 4: TECKENKODNINGAR I den listan ska inga dubbletter finnas. (Däremot kan samma ordform finnas som två olika ordklasser. Då är ju raderna inte dubbletter!) Uppgift 4.19 I uppgift 3.28 tog du fram en lista över bara ordklasserna i rummet.words. Ge ett kommando som gör nästan samma sak, men även använder uniq för att undvika att få dubbletter i svaret. Repetition Uppgift 4.27 Om man bara tittar på de första hundra raderna i rummet.words, vilka är då de sista fem orden där i svensk bokstavsordning? Ge skalkommando och resultat. Uppgift 4.28 Hur många tecken är det på den näst sista raden i /local/texts/jabberwocky? Ge skalkommando och dess resultat. Uppgift 4.29 Räkna för hand också för att se att din lösning till förra uppgiften stämmer. Hm, är det inte ett ifrån? Hur kommer det sig? Så några repetitionsuppgifter utan veckans nyheter. Ge ett eller flera skalkommandon för att lösa uppgifterna i detta avsnitt, samt de resultat som kommandona ger. Uppgift 4.20 Hur många rader lång är hjälptexten för tail? Kopiera filen /local/texts/jabberwocky till din kurskatalog. Uppgift 4.21 Hur många rader finns i den filen? Uppgift 4.22 Hur många ord finns i första raden av samma fil? Uppgift 4.23 Lista de rader i jabberwocky som innehåller texten vorpal. Uppgift 4.24 Hur många rader i jabberwocky innehåller bokstaven b? Uppgift 4.25 Hur lyder den sista raden i jabberwocky som innehåller bokstaven c? Svårare? Uppgifterna i detta avsnitt är kanske lite svårare. Om du kör fast på några kan du skippa dem och om du svarar fel så konstaterar jag bara det, men begär inte komplettering. Uppgift 4.26 Ge ett skalkommando som lägger texten»räksmörgås«i en ny fil shrimp.txt kodad enligt Latin1. 52