Změna kódování souborů

Linux nabízí celou řadu programů pro práci s kódováním.

iconv

Jeho manuálová stránka na debianních systémech sice za mnoho nestojí, ale přesto se jedná o velice užitečný nástroj. Použití je jednoduché:

iconv -f vstupni_kodovani -t vystupni_kodovani soubor[y]

Dekódovaný výsledek se posílá na standardní výstup. Argumentem -l si můžete zobrazit seznam různých kódování.

Příklad:

iconv -f kodovani -t nove_kodovani soubor.txt > soubor_nove_kodovani.txt

Např. – převede soubor db.sql s kodováním ISO-8859-2 na soubor db_utf8.sql s kodováním UTF-8:
iconv -f ISO-8859-2 -t UTF-8 db.sql > db_utf8.sql

recode

Recode je mnohem pokročilejší aplikace. Mimo jiné dokáže odstranit diakritiku ze souboru.

cat dopis.txt Žluťoučký kůň úpěl ďábelské ódy recode utf-8..flat dopis.txt cat dopis.txt Zlutoucky kun upel dabelske ody

Je nutné mít na paměti, že recode vždy mění obsah souboru, takže je dobré si dělat zálohy.

enca

Obsahuje navíc i detekci znakové sady, takže náš dopis bez diakritiky enca rozpozná.

enca dopis.txt 7bit ASCII characters

Díky automatické detekci není nezbytně nutné uvádět výchozí znakovou sadu.

enca -x iso-8859-2 dopis.txt

Převod souboru do znakové sady, kterou máte na svém systému, provedete parametrem -c :

enca -c dopis.txt

Tento nástroj vytvořil David Nečas, takže není divu, že obsahuje vazbu na

cstocs

Což je konvertor specializovaný na češtinu a slovenštinu. Příkaz

enca -C extern -E cstocs -x ascii dopis.txt

Tedy opět odstraní diakritiku ze souboru. Ovšem má i mnoho užitečných funkcí, například dokáže nahradit © za (C) při převodu do ASCII. Převod z CP-1250 na UTF-8 se provede takto

cstocs cp1250 utf-8 < dopis.txt

convmv

Nejen obsah souborů, ale i jejich názvy bývá potřeba konvertovat. Následující příkaz vám opraví diakritiku v souborech pojmenovaných „®esky“.

convmv -f latin2 -t utf8 nazev_souboru

Textové editory

Další možností je využít služeb některého z textových editorů. Například v editoru Kate máte možnost si při otevírání vybrat kódování přímo v dialogu pro otevření nebo uložení souboru. Umí to i další editory, např. Quanta, Kile apod.

Hexdump

Skutečnost, že je text pouze hromada čísel, je velmi snadné ověřit. Příkaz hexdump zobrazuje obsah souboru právě v této formě.

$ cat dopis.txt | hexdump -C 00000000  41 68 6f 6a 20 73 76 c4  9b 74 65 0a |Ahoj sv..te.| 0000000c

Na místě znaku „ě“ jsou dvě tečky. Je tomu tak proto, že jeho kód c4 9b zabírá dva bajty, které jsou navíc v ASCII netisknutelné. Stačí změnit kódování souboru a podívat se, jak se změnil výstup

00000000  41 68 6f 6a 20 73 76 ec  74 65 0a    |Ahoj sv.te.|

Znak „ě“ je teď reprezentován kódem ec.

Provádíme hromadné změny

Převádět jeden soubor po druhém může být otrava. Nebyl by to Linux, pokud by nenabízel možnost automatického zpracování. Nejlepším způsobem je použít příkaz find

find . -iname '*.txt' -exec recode cp1250..utf8 {} \;

Tímto způsobem se převedou všechny textové soubory v aktuálním adresáři (a podadresářích) z kódování CP-1250 do UTF-8. Příkaz find je velmi flexibilní, takže

find . -type f -exec convmv -f cp1250 -t utf-8 {} --notest \;

Změní názvy všech souborů z kódování Windows na UTF-8.


Hexadecimální soustava

V IT se používá šestnáctková soustava (číslice 0, 1, … e, f). Důvod je prostý. Když začneme psát převodní tabulku do binární soustavy pro desítkové číslice, zjistíme, že potřebujeme 4 bity, ale některé kombinace nejsou povoleny. Zatímco šestnáctkové číslice plně zaplní prostor 4 bitů. Jeden bajt se potom dá zapsat dvěma hexadecimálními číslicemi, což velice usnadňuje ruční převod. Například 1001 1011 je 9b, což je 155 (v desítkové soustavě), nebo 233 v osmičkové, která se v minulosti také používala.

Zdroje:
http://www.linuxexpres.cz/praxe/kodovani-textu-na-pocitaci
http://www.abclinuxu.cz/poradna/linux/show/220282;jsessionid=1o59qagr3p9sg