Kódování znaků

Při práci v Ubuntu se můžete setkat s problémem kódování českých znaků, kdy se místo určitých znaků zobrazují znaky naprosto nesmyslné, tzv. syndrom „rozsypaného čaje“. Problém se může týkat textových souborů, titulků ve filmu, internetových stránek nebo zpráv v internetové komunikaci. V drtivé většině pocházejí tyto „problémové“ soubory z operačního systému MS Windows, nebo jsou způsobeny jeho používáním.

Tento článek řeší problém se špatným zobrazením obsahu souborů. Pokud máte problém se zobrazením názvu souborů, poté máte špatně připojený diskový oddíl. Viz Připojení disku.

Tento návod vám vysvětlí podstatu problému, a pomůže vám pozměnit textové soubory tak, aby zobrazovaly češtinu správně.

Pokud máte problémy se zobrazením titulků ve filmech, čtěte článek České titulky ve filmech.

Pokud máte problémy s internetovou komunikací (většinou ICQ) v programu Pidgin, čtěte článek Pidgin.

Pokud máte problémy se zobrazením internetových stránek ve svém prohlížeči, jsou to lajdácky napsané stránky. Internetové stránky lze velice jednoduše napsat tak, že s jejich zobrazením nejsou problémy na žádném operačním systému. Kontaktujte jejich autora a upozorněte ho. Pokud HTML stránky přímo tvoříte a máte problém se zobrazením jejich zdrojového kódu, postupujte úplně stejným způsobem, jako je uveden níže (HTML stránky jsou obyčejné textové soubory). Nezapomeňte v hlavičce stránky specifikovat nové kódování.

Příčina problému

Tento problém má historické důvody. V minulosti nebylo možné, aby všechny znaky světa byly obsaženy v jediné znakové sadě. Proto si nemohl Japonec, Francouz a Čech poslat textový soubor s národními znaky, aby to u každého vypadalo stejně. Z tohoto důvodu vznikla znaková sada Unicode (a jeho zápis UTF-8), která tyto hranice bourá, a uvedené možnosti poskytuje. UTF-8 je moderní a perspektivní lék na všechny problémy s kódováním znaků, které kdy v minulosti byly, a proto jej i Ubuntu používá jako výchozí kódování znaků. Bohužel microsoftí systémy (včetně nejnovějších Windows Vista) pro ukládání textových souborů stále upřednostňují historické znakové sady se všemi jejich neřestmi - v ČR (a SR) je to sada windows-1250. Nezbývá tedy, než si povzdychnout nad přístupem Microsoftu a problém ručně vyřešit.

Pokud budete mít svoje soubory v kódování UTF-8, budou se vám správně zobrazovat pod Ubuntu i u většiny programů pod Windows. Pokud budete mít svoje soubory ve windows-1250, budou se vám zobrazovat správně jen pod českými Windows, nikde jinde. Kódování UTF-8 lze totiž v souboru většinou rozeznat, kódování windows-1250 nikoliv.

Řešení problému

Ubuntu nám poskytuje množství nástrojů, které nám dovolí převést textové soubory z kódování Windows do univerzálního UTF-8. Lze použít jak grafický „klikací“ způsob, tak využít příkazů v Terminálu, které umožňují převod mnoha takových souborů najednou.

Kódování UTF-8 se v programech většinou označuje utf8 nebo UTF-8. Kódování windows-1250 se většinou označuje windows-1250, win-1250 nebo cp1250.

Oprava češtiny

Spusťte si Aplikace → Příslušenství → Textový editor.

Zvolte Soubor → Otevřít. Rozviňte nabídku Kódování znaků a zvolte Přidat nebo odstranit.

V pravé části tabulky si pomocí tlačítek Přidat a Odstranit ponechte často používané nestandardní kódování, nejčastěji vám stačí pouze Středoevropské WINDOWS-1250. Stiskněte OK.

Označte požadovaný soubor, a v nabídce Kódování znaků zvolte Středoevropské (WINDOWS-1250). Poté Otevřít.

Soubor by měl být nyní zobrazený správně v češtině. Zvolte Soubor → Uložit jako, jako název souboru ponechte výchozí název (přepíše se původní soubor), a v nabídce Kódování znaků vyberte Aktuální locale (UTF-8). Pak Uložit.

Soubor jste si nyní převedli z windows kódování do univerzálního kódování. Už byste s ním neměli mít nikde problémy.

Přidejte si zdroj universe a nainstalujte si balík cstocs.

Otevřete si Terminál a přepněte se do adresáře s požadovaným souborem. Kódování souboru potom převedete příkazem:

cstocs -i 1250 utf8 soubor.txt

stejně tak lze převést více souborů naráz

cstocs -i 1250 utf8 soubor1.txt soubor2.txt

nebo třeba všechny textové soubory v aktuálním adresáři

cstocs -i 1250 utf8 *.txt

Dejte si pozor, ať daný příkaz nespustíte na daný soubor více než jednou. Pro jistotu mějte vždy uchovanou kopii stranou.

Recode je ve standardních zdrojích Ubuntu, stačí tedy pouze nainstalovat balík recode. Dle mých zkušeností ale není tak spolehlivý jako příkaz cstocs.

Otevřete si Terminál a přepněte se do adresáře s požadovaným souborem. Kódování souboru potom převedete příkazem:

recode 1250..utf8 soubor.txt

stejně tak lze převést více souborů naráz

recode 1250..utf8 soubor1.txt soubor2.txt

nebo třeba všechny textové soubory v aktuálním adresáři

recode 1250..utf8 *.txt

Samozřejmě si vždy uchovejte kopii stranou, kdyby se při převodu něco nepovedlo.

Otevřete si Terminál a přepněte se do adresáře s požadovaným souborem. Kódování souboru potom převedete příkazem:

iconv -f windows-1250 -t utf8 <soubor.txt >nový_soubor.txt

Program najdete ve stejnojmenném balíku convmv.

Otevřete si Terminál.\ Převedení všech názvů souborů a adresářů uvnitř adresáře data v domovské složce z ISO-8859-2 do UTF-8:

convmv -f iso-8859-2 -t utf8 -r --notest --replace ~/data

Opravení diakritiky v souborech pojmenovaných „®esky“:

convmv -f latin2 -t utf8 nazev_souboru

Změna názvu všech souborů z kódování windows-1250 na UTF-8:

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

Nainstalujte si program enca. Otevřete si Terminál a přepněte se do adresáře s požadovaným souborem.

Detekce znakové sady

enca dopis.txt

Díky automatické detekci není nezbytně nutné uvádět výchozí znakovou sadu (detekce může ovšem selhat, nespoléhejte na ni!).

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

Odkazy

  • Poslední úprava: 2012/07/26 18:28
  • autor: Ubuntu