RSS

Byta teckenkodning och ändra radslut

31 Mar

Här om dagen hade jag gjort klart informationsbladet till föräldrarna på avdelningen. Jag hade en textfil med hela texten och en PDF-fil skapad i Scribus. Textfilen skulle jag använda när jag sände ut bladet med mail till de föräldrar som vill ha det. Jag sände först texten som mail till mig själv på jobbet från min bärbara som kör Ubuntu. Resultatet blev inte bra!

De svenska tecknena å, ä och ö såg inte ut som de skulle. Det här är ett vanligt problem när man skickar textfiler olika operativsystem. Jag trodde att jag hade varit klurig och gjort det enkelt för mig. Men det gick alltså inte.

Det är egentligen två problem. Å ena sidan handlar det om teckenkodning och å den andra om vagnretur.

De teckenkodningar jag kommer att ta upp här är den som finns på min Ubuntudator, UTF-8, och den som används i den svenska versionen av Windows, ISO-8859-1 (Latin-1). Vad det handlar om är att få de svenska tecknen rätt.

När det gäller vangretur eller radslut, använder Ubuntu CR-formatet (Carridge Return) medan Windows kör CR-LF (Carridge Return och Line Feed). Här handlar det om att få radbrytningarna rätt och inga irriterande extratecken på slutet. För i det första fallet består radslutet av ett tecken, men i det andra är det två. Det här kan se lite konstigt ut när man inte är beredd. För i Windows så blir det ingen radbrytning i texten och i det omvända fallet så syns tecknen ^M. Men det finns ett sätt att fixa det.

Jag kommer här att visa några sätt som gör att man kan lösa de här problemen. Men det blir lite nördigt eftersom allt kommer att ske i terminalen. Och lägg märke till att det bara är textfiler jag tar upp här.

Koll på filen

För att i terminalen få uppgifter om vad det är för en fil man har att göra med, använder man kommandot file. Det enda man behöver ange är filnamnet.

file minfil

Kör du det här på en textfil skapad i Ubuntu kan du få följande meddelande. Filen har teckenkodningen UTF-8.

file ubuntu.txt
ubuntu.txt: UTF-8 Unicode text

Har filen skapats i Windows kan man få följande information, som talar om att teckenkodningen är Latin-1 (ISO-8859-1) och att radsluten är gjorda i CRLF-format. Man ser dock inte vilket variant av ISO-8859 som används.

file windows.txt
windows.txt ISO-8859 text, with CRLF line terminators

Du kan ibland få fram vilket språk filen innehåller.

file minfil.txt
minfil.txt: UTF-8 Unicode English text

Det här kommandot fungerar även på t ex bilder, PDF-filer, OpenDocument-filer och länkar.

file minbild.png
minbild.png: PNG image, 2940 x 1331, 8-bit/color RGBA, non-interlaced
file adobe.pdf
adobe.pdf: PDF document, version 1.5
file OOo.ods
OOo.ods: OpenDocument Spreadsheet
file minfil
minfil: symbolic link to `/sök/väg/minfil'

Byta teckenkodning

Men nu var jag intresserad av att konvertera en textfil från Ubuntu och UTF-8 till Windows och ISO-8859-1. Det finns i alla fall två program som kan lösa mitt problem: iconv och recode.

iconv fanns redan installerat på min Ubuntu. Att använda det är enkelt. För att konvertera anger man den teckenkodning filen har, den man vill ha, filen man vill konvertera och namnet på en ny fil.

iconv -f gammal-teckenkodning -t ny-teckenkodning filen -o nyfil

Eller så här.

iconv -t ny-teckenkodning filen -o nyfil

Exempelvis så här.

iconv -t iso-8859-1 ubuntu.txt -o ubuntu-iso.txt

recode fick jag installera från paketförrådet. För att konvertera en fil gör man så här.

recode -v gammal-teckenkodning..ny-teckenkodning filen

Exempelvis så här.

recode -v utf8..iso-8859-1 ubuntu.txt

recode skriver över den fil man konverterar, så blir det fel har man inte originalfilen kvar. För att få en ny fil med det konverterade innehållet, gör man så här.

recode -d gammal-teckenkodning..ny-teckenkodning <fil >nyfil

Exempelvis så här.

recode -d utf8..iso-8859-1 <ubuntu >windows

Nu har jag hittat ett sätt att konvertera flera filer på en gång, vilket kan vara praktiskt. Här konverteras alla filer med ändelsen .txt.

for i in mapp/*.txt; do recode utf8..iso-8859-1 $1; done

Ändra radslut

Det andra problemet handlade om hur man i textfiler anger att raden är slut och en ny ska börja. För Ubuntu är det CR-format och för Windows CR-LF-format.

För att få Windows radslut.

todos ubuntu.txt

För att från Windows istället få Ubuntus radslut.

fromdos windows.txt

Man kan också göra ett ”rörmokeri” för att göra hela processen i ett svep.

recode utf8..iso-8859-1 ubuntu.txt && todos ubuntu.txt

Det går också att ändra radslut med enbart recode. Vill man ta bort CR-LF samtidigt som man konverterar från Latin-1 till UTF-8, gör man så här.

recode iso-8859-1/crlf..utf8 ubuntu.txt

Vill man lägga till ett CR-LF när man konverterar från UTF-8 till Latin-1, gör man så här.

recode utf8..iso-8859-1/crlf windows.txt

Resurser

Creative Commons License
Det här verket av Maths Göthe är licensierat under Creative Commons Erkännande-Dela Lika 2.5 Sverige License.

Annonser
 
6 kommentarer

Publicerat av på 31 mars 2010 i Dator, Terminalen

 

Etiketter: , , , , , , , , ,

6 svar till “Byta teckenkodning och ändra radslut

  1. Moralrevisorn

    17 september 2011 at 16:59

    Hej!

    När jag skriver inlägg fungerar radslut någorlunda. Men om jag reviderar ett publicerat inlägg blir radsluten slumpvisa. Hur kommer man till rätta med det?

     
    • Maths

      17 september 2011 at 17:34

      Jag antar att du menar inlägg på din blogg. Om du bara fyller på med text, tror inte att problemet uppstår. Men det har hänt mig att jag skrivit en text i ett textredigeringsprogram och klistrat in det. Då har det blivit lite konstigt. Och det gäller nog bara om man använder det visuella läget. För om man skriver HTML-kod direkt så fixar du styckeindelningen själv.

       
      • Moralrevisorn

        18 september 2011 at 14:44

        Jag hade problem med radslut när jag började skriva inlägg direkt i bloggen. Därför övergick jag till att kopiera in text från word. Det funkar tillfredsställande och styckindelning är inget problem. Det är när jag reviderar ett redan publicerat inlägg som radsluten blir slumpvisa. Se inlägget http://moralrevisorn.wordpress.com/2011/09/14/sluta-kompromettera-kyrkan-%e2%80%93-kryp-till-korset-biskop-jackelen/
        som exempel

         
        • Maths

          18 september 2011 at 16:11

          Det ser ju inte så bra ut. Men jag kan inte förklara det. En anledning jag kan tänka mig är att det blir fel i och med att du använder Wordformatet. Men öppna inlägget för redigering och växla från Visuell till HTML. Alla stycken ska omslutas med en p-tagg.

          <p>Det här är ett stycke.</p>
          <p>Det här är nästa stycke.</p>
          

          Använder man Word, eller som jag OpenOffice, så kommer det att finnas även annan formatering.

           
        • Maths

          18 september 2011 at 20:50

          Jag har nu kollat källkoden på din sida. Den ser normal ut. Så jag vet inte vad man kan göra.

           
  2. Moralrevisorn

    19 september 2011 at 13:55

    Tack så mycket för visat intresse.

     

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

 
%d bloggare gillar detta: