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