Upozornění :
Tento dokument již neplatí a není udržován.
|
Používání UTF-8 v Gentoo
1.
Kódování znaků
Co je to kódování znaků?
Počítače samy o sobě nerozumí textům. Každý znak je reprezentován
číslem. Každá sada čísel reprezentující písmena a znaky (známá jako kódování
nebo znaková sada) bývala omezená kvůli limitům v počítačové technice.
Historie kódování znaků
Nejobvyklejším (nebo alespoň nejuznávanějším) kódováním je ASCII
(American Standard Code for Information Interchange). Je považováno za
nejúspěšnější softwarový standard vůbec. Současné ASCII bylo standardizováno
v roce 1986 (ANSI X3.4, RFC 20, ISO/IEC 646:1991, EMCA-6) Americkým
ústavem pro národní standardizaci (American National Standards Institute).
ASCII je výlučně sedmibitové, což znamená, že používá čísla
reprezentovatelná sedmi číslicemi dvojkové soustavy, tedy čísla
v rozsahu od nuly do 127 v desítkové soustavě. Ta zahrnují
dvaatřicet netisknutelných řídicích kódů, z nichž většina leží mezi 0 a
31, poslední řídicí znak DEL neboli delete leží na pozici číslo 127. Znaky
s čísly 32 až 126 jsou tisknutelné: mezera, interpunkční znaménka,
znaky anglické abecedy a čísla.
Osmý bit byl v ASCII původně používán jako paritní ke zjišťování chyb.
Pokud to není potřeba, je jeho hodnota nulová. To znamená, že v ASCII
je každý znak reprezentován jedním bajtem.
Ačkoliv ASCII dostačovalo pro komunikaci v moderní angličtině, problémy
nastávaly v ostatních evropských jazycích, které obsahují akcentované
znaky. Aby se vyhovělo jejich potřebám, byly vytvořeny standardy ISO 8859.
Byly zpětně kompatibilní s ASCII, neponechávaly však osmý bit prázdný,
ale používaly jej ke zpřístupnění dalších 127 znaků v každém kódování.
Brzy se projevila omezení standardů ISO 8859, v současnosti existuje
patnáct variant tohoto standardu (8859-1 až 8859-15). Mimo rozsah znaků
kompatibilních s ASCII často nastávají problémy se znaky, které jsou
reprezentovány týmž číslem. Aby byla situace ještě složitější,
v některých verzích MS Windows je pro východoevropské jazyky používáno
kódování Windows-1250. Je podobné ISO 8859-2, přesto existují některé
odlišnosti. Všechny tyto sady jsou zpětně kompatibilní s ASCII.
Potřeba vytvoření úplně odlišného jednobajtového kódování pro jazyky
nepoužívající latinku, např. EUC (Extended Unix Coding), které je používáno
pro japonštinu a korejštinu (a omezeně i čínštinu), vytvořila další zmatky,
protože různé operační systémy stále používaly odlišná kódování pro tyto
jazyky, např. Shift-JIS a ISO-2022-JP. Uživatelé, kteří si chtěli
prohlédnout text psaný cyrilicí, si museli vybrat mezi KOI-8R pro Rusko a
Bulharsko a KOI-8U pro Ukrajinu, příp. neúspěšným ISO 8859-5 nebo častým
Windows-1251. Všechna tato kódování byla nekompatibilní s ASCII
(ačkoliv KOI-8 má znaky ve shodném pořadí jako latinka, takže pokud je osmý
bit odstraněn, text je na ASCII terminálu stále dekódovatelný).
To vedlo ke zmatkům a také k téměř nulové možnosti vícejazyčné
komunikace, zvláště mezi jazyky s různými abecedami. Vítejte ve světě
Unicode.
Co je Unicode?
Unicode je zbaveno tradičního jednobajtového omezení. Používá 17 "úrovní"
o 65 536 kódech a dokáže tak popsat až 1 114 112
znaků. Mnozí mají mylnou představu, že Unicode je 16bitové kódování, protože
první úroveň, tzv. "Basic Multilingual Plane" (BMP), popisuje téměř vše, co
kdy budete potřebovat.
Unicode je kódováno mnoha způsoby, dva nejčastější jsou UTF (Unicode
Transformation Format) a UCS (Universal Character Set). Číslo za
znaky UTF udává počet bitů v jednotce, zatímco číslo za znaky UCS udává
počet bajtů. Nejrozšířenějším způsobem kódování textů v Unicode se pro
svou osmibitovou strukturu stalo UTF-8, které je popisováno v tomto
dokumentu.
UTF-8
UTF-8 je kódování s proměnnou délkou, což v tomto případě znamená,
že symbol je zakódován jedním až čtyřmi bajty. Tzn. první bajt UTF-8 je
použit pro kódování ASCII, takže znaková sada je zpětně kompatibilní
s ASCII. V UTF-8 jsou kódy znaků anglické abecedy shodné s
odpovídajícími ASCII kódy, ale jsou o jeden bit delší. Uživatelé východních
abeced (např. japonštiny), které dostaly vyšší rozsahy bajtů, nebudou příliš
štastní, protože to pro ně znamená 50% nadbytečnost v jejich datech.
Čím pro vás může být UTF-8 užitečné
UTF-8 vám umožní pracovat ve standardizovaném a mezinárodně akceptovaném
vícejazyčném prostředí, s poměrně nízkou redundancí dat. UTF-8 je
upřednostňovaný způsob přenosu jiných než ASCII znaků po Internetu, přes
email, IRC nebo téměř libovolné jiné médium. Přesto řada lidí považuje UTF-8
v online komunikaci za neslušné. Před použitím ne-ASCII znaků je
vždy dobré znát postoj k UTF-8 v dané poštovní konferenci, IRC
kanálu nebo Usenetové skupině.
2.
Nastavení UTF-8 v Gentoo Linuxu
Nalezení nebo vytvoření locales v UTF-8
Teď, když rozumíte základním principům Unicode, jste připraven začít
používat ve svém systému UTF-8.
Základním předpokladem pro používání UTF-8 je přítomnost glibc
s podporou národních jazyků (national language support). Nejlépe se podpora
pro UTF-8 aktivuje pomocí nastavení v souboru /etc/locale.gen.
Jeho popis je mimo rámec tohoto dokumentu, zájemce však odkážeme na naši lokalizační příručku.
Dále musíme vědět, jestli je pro náš jazyk UTF-8 locale (lokalizace) přítomna
nebo zda ji musíme vytvořit.
Výpis kódu 2.1: Nalezení existujícíh UTF-8 locales |
# locale -a | grep 'cs_CZ'
cs_CZ
cs_CZ.UTF-8
|
Z výstupu tohoto příkazu jsou důležité výsledky s příponou
.UTF-8. Pokud takový výsledek neexistuje, musíme vytvořit locale
pro s UTF-8.
Poznámka:
Následující kód spusťte jen v případě, že pro svůj jazyk nemáte UTF-8
lokalizaci dostupnou.
|
Výpis kódu 2.2: Tvorba UTF-8 locale |
# localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
|
Dalším způsobem, jak přidat UTF-8 locale, je doplnit ji do souboru
/etc/locale.gen a vygenerovat patřičné locale skriptem
locale-gen.
Výpis kódu 2.3: Řádek v /etc/locale.gen |
cs_CZ.UTF-8 UTF-8
|
Nastavení locale
Před použitím UTF-8 lokalizace musí být nastavena jedna proměnná prostředí:
LANG (tato proměnná přepíše nastavení dané proměnnou LC_ALL).
Existuje vícero způsobů její aktivace; někomu vyhovuje mít UTF-8
nastaveno pouze pro vybraného uživatele, pak je nastavení přítomno
v souboru ~/.profile (pokud používáte /bin/sh),
~/.bash_profile nebo ~/.bashrc (používáte-li
/bin/bash).
Jiní dávají přednost globálnímu nastavení lokalizace. Zvláštním případem,
pro který autor zejména toto nastavení doporučuje, je používání
/etc/init.d/xdm, protože tento startovací skript spouští
správce oken dříve, než jsou načteny výše zmíněné inicializační soubory
shellů, tedy i před nastavením všech proměnných prostředí.
Globálně by měly být locales nastaveny souborem
/etc/env.d/02locale. Měl by vypadatpřibližně takto:
Výpis kódu 2.4: Ukázkový soubor /etc/env.d/02locale |
LANG="cs_CZ.UTF-8"
|
Poznámka:
Místo LANG můžete použít také LC_ALL, čímž změníte celé
lokalizační nastavení, například formátování čísel a finančních částek.
V ojedinělých případech toto může způsobit chyby, avšak většinou to bude
fungovat bez problémů. Detailnější popis změn, které způsobí nastavení
LC_ALL, najdete na stránce
GNU locale.
|
Dále musí být prostředí po změně aktualizováno.
Výpis kódu 2.5: Aktualizace prostředí |
# env-update
>>> Regenerating /etc/ld.so.cache...
* Caching service dependencies ...
# source /etc/profile
|
Nyní spusťte locale bez argumentů, abyste si ověřili, že máte
v prostředí správně nastaveny proměnné:
Výpis kódu 2.6: Kontrola nové lokalizace v prostředí |
# locale
LANG=
LC_CTYPE="cs_CZ.UTF-8"
LC_NUMERIC="cs_CZ.UTF-8"
LC_TIME="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"
LC_MONETARY="cs_CZ.UTF-8"
LC_MESSAGES="cs_CZ.UTF-8"
LC_PAPER="cs_CZ.UTF-8"
LC_NAME="cs_CZ.UTF-8"
LC_ADDRESS="cs_CZ.UTF-8"
LC_TELEPHONE="cs_CZ.UTF-8"
LC_MEASUREMENT="cs_CZ.UTF-8"
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=cs_CZ.UTF-8
|
Toť vše. Teď používáte UTF-8 lokalizaci, další překážkou je však nastavení běžně
používaných aplikací.
3.
Podpora v aplikacích
Když Unicode začal ve světě softwaru nabírat na síle, vícebajtové znakové
sady nebyly vhodné pro jazyky jako C, v nichž je napsáno mnoho běžně
používaných programů. Ještě dnes nejsou některé programy schopny správně
pracovat s UTF-8. Většina naštěstí ano!
Jména souborů, NTFS a FAT
V linuxovém jádře je několik voleb souvisejících s NLS, nenechte
se jimi však zmást. Jedinou věcí, kterou je třeba udělat, je přidat podporu
pro UTF-8 do vašeho jádra a nastavit výchozí NLS na utf8.
Výpis kódu 3.1: Kroky pro nastavení podpory UTF-8 v jádře |
File Systems -->
Native Language Support -->
(utf8) Default NLS Option
<*> NLS UTF8
|
Pokud máte v úmyslu připojovat oddíly s NTFS, můžete se hodit
parametr příkazu mount nls=. Chcete-li připojovat oddíly s FAT,
možná budete potřebovat použít parametr codepage= nebo nastavit výchozí
znakovou stránku v konfiguraci jádra. Volba codepage pro příkaz
mount má větší prioritu než výchozí nastavení jádra.
Výpis kódu 3.2: Nastavení pro FAT v konfiguraci jádra |
File Systems -->
DOS/FAT/NT Filesystems -->
(437) Default codepage for fat
|
Volbu Default iocharset for fat byste neměli nastavovat na UTF-8, není to
doporučené, lepší je použití volby utf8=true. Více informací viz man
mount a dokumentace kernelu v souboru
/usr/src/linux/Documentation/filesystems/vfat.txt.
Na změnu kódování jmen souborů můžete použít app-text/convmv.
Výpis kódu 3.3: Ukázka použití convmv |
# emerge --ask app-text/convmv
# convmv -f <současné-kódování> -t utf-8 <název-souboru>
# convmv -f iso-8859-2 -t utf-8 filename
|
Na změnu kódování obsahu souboru použijte program iconv,
který je součástí glibc:
Výpis kódu 3.4: Ukázka použití iconv |
# iconv -f iso-8859-2 -t utf-8 název-souboru
# iconv -f iso-8859-2 -t utf-8 název-souboru > název-nového-souboru
|
Týž účel splní i app-text/recode.
Konzole
Důležité:
Pro zprovoznění Unicode na konzoli budete potřebovat
>=sys-apps/baselayout-1.11.9.
|
Editací /etc/rc.conf, konkrétně nastavením
UNICODE="yes", umožníte používání UTF-8 na konzoli. Přečtěte si
komentáře v tomto souboru — pokud chcete opravdu využívat
Unicode, je důležité mít písmo, které obsahuje dostatečný počet znaků, a
samozřejmě vytvořenou správnou locale.
Proměnná KEYMAP nastavená v /etc/conf.d/keymaps
by měla mít přiřazenu klávesovou mapu podporující Unicode.
Výpis kódu 3.5: Ukázka části /etc/conf.d/keymaps |
KEYMAP="cz"
|
Ncurses a Slang
Poznámka:
Pokud nemáte Slang nainstalován nebo jej nepoužíváte, ignorujte v této
sekci vše, co se jím zabývá.
|
Je rozumné přidat unicode k vašim USE flagům
v /etc/make.conf a znovu přeložit sys-libs/ncurses
a sys-libs/slang, pokud je třeba. Portage to při aktualizaci systému
provede samo:
Výpis kódu 3.6: Aktualizace systému |
# emerge --update --deep --newuse world
|
Po změně USE flagů je třeba také překompilovat balíčky, které jsou
s těmito knihovnami slinkované. Nástroj, který pro to používáme, se
jmenuje revdep-rebuild a je součástí balíčku gentoolkit.
Výpis kódu 3.7: Překompilování programů slinkovaných s ncurses nebo slang |
# revdep-rebuild --soname libncurses.so.5
# revdep-rebuild --soname libslang.so.1
|
KDE, GNOME a Xfce
Všechna hlavní desktopová prostředí plně podporují Unicode a není kvůli nim
třeba nastavovat nic než to, co je již v této příručce popsáno —
to díky knihovnám, na nichž jsou založena, a které již s UTF-8
počítají. Z toho plyne, že i všechny aplikace napsané pomocí těchto
knihoven by měly pracovat s UTF-8 bez problémů.
Výjimky z tohoto pravidla jsou knihovny Xlib a GTK+1. GTK+1 musí
mít v souboru ~/.gtkrc nastaveno písmo s kódováním iso-10646-1,
například -misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1. Také aplikacím,
které používají Xlib nebo Xaw, je třeba nastavit písmo podporující Unicode.
Poznámka:
Pokud máte k dispozici ovládací centrum z gnome1, použijte raději
k výběru patřičného písma jej.
|
Výpis kódu 3.8: Příklad souboru ~/.gtkrc (pro GTK+1) s nastavením písma kompatibilního s Unicode |
style "user-font"
{
fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1"
}
widget_class "*" style "user-font"
|
Pokud program nabízí rozhraní v Qt i GTK+2, bude druhé z nich
pravděpodobně dávat lepší výsledky při použití Unicode písma.
X11 a písma
Důležité:
x11-base/xorg-x11 podporuje Unicode lépe než Xfee86 a je silně
doporučován.
|
Písma ve formátu TrueType podporují Unicode a většina fontů dodávaných
s X.org obsahuje impozantní počet znaků, samozřejmě ale ne každou
literu (gliph), která je definována v Unicode. K vytvoření písem
(včetně Bitstream Vera) s podporou východoasijských jazyků v X musíte
mít nastaven USE flag cjk. Tento flag využívá i spousta dalších programů,
může tedy být užitečné nastavit jej permanentně.
Také řada písem obsažených v Portage podporuje Unicode.
Výpis kódu 3.9: Nepovinné: doinstalování dalších písem podporujících Unicode |
# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts
|
Správci oken a emulátory terminálu
Okenní správci, které nejsou založeny na GTK nebo Qt, obecně podporují
Unicode jen chabě, protože často přistupují k fontům prostřednictvím Xft.
Pokud váš správce oken nepoužívá Xft, můžete použít specifikaci písma, jak je
zmíněno v předchozí sekci.
Emuátory terminálu, jež používají Xft a podporují Unicode, je těžší nalézt.
Kromě programů Konsole a gnome-terminal je nejlepší volbou
x11-terms/rxvt-unicode, xfce-extra/terminal,
gnustep-apps/terminal, x11-terms/mlterm nebo prostý
x11-terms/xterm přeložený s USE flagem unicode a spuštěný
příkazem uxterm. app-misc/screen, pokud je spuštěn příkazem
screen -U nebo pokud je do ~/.screenrc vložen následující
řádek, podporuje UTF-8 také:
Výpis kódu 3.10: ~/.screenrc pro UTF-8 |
defutf8 on
|
Vim, Emacs, Xemacs a Nano
Vim plně podporuje UTF-8 a dokáže též rozpoznat soubory s textem
v kódování UTF-8. Bližší informace získáte příkazem :help mbyte.txt.
Emacs 22.x a novější také plně podporuje UTF-8, Xemacs 22.x však zatím
nepodporuje kombinovaní znakových sad.
Pro podporu CJK jazyků v UTF-8 mohou nižší verze Emacs a/nebo Xemacsu
vyžadovat instalaci app-emacs/mule-ucs, resp. app-xemacs/mule-ucs
a přidání následujícího kódu do ~/.emacs:
Výpis kódu 3.11: Podpora CJK UTF-8 v Emacs |
(require 'un-define)
(require 'jisx0213)
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
|
Nano nabízí plnou podporu UTF-8 od verze 1.3.6.
Shelly
Bash v současné době plně podporuje Unicode prostřednictvím
knihovny GNU readline. Z shell (zsh) podporuje Unicode, pokud je
skompilován s USE flagem unicode.
C shell, tcsh ani ksh nepodporují UTF-8 vůbec.
Irssi
Irssi plně podporuje UTF-8, uživatel však musí nastavit příslušnou volbu:
Výpis kódu 3.12: Povolení UTF-8 v Irssi |
/set term_charset UTF-8
|
Na kanálech, na nichž jsou často používány jiné než ASCII znaky v jiném
kódování než UTF-8, může být ke konverzi použit příkaz /recode. Více
informací získáte příkazem /help recode.
Mutt
Poštovní klient Mutt podporuje Unicode velmi dobře, dokonce nemusíte nastavovat
žádné volby. Stačí správně nastavené prostředí a všechny konfigurační soubory
(včetně podpisu) v kódování UTF-8.
Poznámka:
I nadále se mohou při zobrazování dopisů objevovat otazníky. To je kvůli
tomu, že někteří lidé používají poštovní klienty, které neoznamují použité
kódování. S tím nelze mnoho dělat, jedině požádat odesilatele, aby si
správně nastavil svůj poštovní program.
|
Bližší informace najdete v Mutt Wiki.
Man
Manuálové stránky jsou nedílnou součástí libovolného linuxového stroje.
Nahraďte níže uvedený řádek souboru /etc/man.conf, abyste
zajistili správné zobrazení manuálových stránek.
Výpis kódu 3.13: Úprava souboru man.conf pro podporu Unicode |
NROFF /usr/bin/nroff -Tascii -c -mandoc
NROFF /usr/bin/nroff -mandoc -c
|
elinks a links
Jde o velmi používané textové webové prohlížeče, takže se podívejme,
jak v nich nastavit podporu pro UTF-8. Jsou dva způsoby: buď
prostřednictvím položky Nastavení (Setup) přímo v prohlížeči, nebo
upravením konfiguračního souboru. V prohlížeči se stiskem Alt+N
(nebo Alt+S, pokud s vámi program komunikuje anglicky) dostanete do
nabídky Nastavení. V ní vyberte položku Nastavení terminálu (Terminal
options), popř. stiskněte klávesu T. V okně zaškrtněte klávesou
Enter volbu UTF-8 I/O. Pak nastavení uložte a opusťte menu.
V linksu musíte znovu přejít do nabídky Nastavení a volby uložit stiskem
klávesy S. Konfigurační soubor je uveden níže.
Výpis kódu 3.14: Povolení UTF-8 v elinksu/linksu |
set terminal.linux.utf_8_io = 1
terminal "xterm" 0 1 0 us-ascii utf-8
|
Samba
Samba je software implementující SMB (Server Message Block) protokol pro
unixové systémy, jako jsou Macy, Linux a FreeBSD. Protokolu se také někdy říká
CIFS (Common Internet File System). Součástí Samby je také subsystém NetBIOS,
který se stará o sdílení souborů v sítích s MS Windows.
Výpis kódu 3.15: Nastavení Samby pro UTF-8 |
dos charset = 1255
unix charset = UTF-8
display charset = UTF-8
|
Vyzkoušení
Existuje spousta stránek testujících UTF-8. Prohlížeče net-www/w3m,
net-www/links, net-www/elinks, net-www/lynx a všechny
prohlížeče založené na Mozille (včetně Firefoxu) plně podporují UTF-8,
stejně jako Konqueror a Opera.
Používáte-li některý z textových prohlížečů, ověřte si, že opravdu
používáte terminál podporující Unicode.
Pokud jsou některé znaky zobrazeny jako čtverečky obsahující písmena či
čísla, znamená to, že vámi používané písmo neobsahuje příslušnou literu,
která je pro zobrazení daného UTF-8 znaku potřeba. Namísto toho je zobrazen
čtvereček s číslem symbolu v šestnáctkové soustavě.
Vstupní metody
Znaky, které vaše klávesnice neobsahuje, mohou být v X zadávány pomocí tzv.
mrtvých kláves. Ty fungují tak, že nejprve stisknete například
klávesu s háčkem spolu s modifikátorem Shift (Shift+ ˇ)
a následně klávesu se znakem, jemuž háček přísluší — mrtvá klávesa onen znak
modifikuje.
K povolení mrtvých kláves v X potřebujete rozložení klávesnice, které
je podporuje. Většina evropských rozložení standardně mrtvé klávesy obsahuje,
to však neplatí na rozložení používaném v Severní Americe. Ačkoliv existují
nesrovnalosti mezi rozloženími, jako nejjednodušší řešení se jeví použití např.
názvu "en_US" místo "us". Rozložení se nastavuje
v /etc/X11/xorg.conf:
Výpis kódu 3.16: Úryvek souboru /etc/X11/xorg.conf |
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "en_US"
EndSection
|
Poznámka:
Předchozí změna musí být provedena, pokud používáte severoamerické rozložení
nebo takové rozložení, u nějž mrtvé klávesy dělají problémy. Evropští
uživatelé by již měli mít mrtvé klávesy funkční.
|
Změny se projeví až po novém spuštění X serveru. Pro okamžité uplatnění změn
použijte setxkbmap, např. setxkbmap en_US
Nejlepší je ukázat mrtvé klávesy na příkladech. Ačkoliv jsou výsledky
závislé na lokálním nastavení, systém zůstává shodný. Příklady obsahují
UTF-8, takže abyste je mohli shlédnout, musíte buď svému prohlížeči sdělit,
že stránka je v kódování UTF-8, nebo již mít UTF-8 funkční.
Pokud stisknete AltGr současně s Shiftem a klávesu 0 (ne na numerické
klávesnici!) a následně stisknu o, bude výsledkem ő. Pokud stisknete AltGr,
Shift spolu s klávesou 0 a následně u, dostanu ű. Stisknete-li AltGr
s čárkou (´) a posléze o, dostanu ō; AltGr s čárkou a následné a
dá ā.
Chceme-li získat španělské ñ, je třeba stisknout nejsprve kombinaci
AltGr+Shift+1 a následně klávesu n. Stisknete-li klávesy AltGr, Shift a
klávesu 4 (na horní řadě kláves) a pokud následně povolím a znovu stisknu
jen čtyřku, dostanu háček (˘). To funguje jen pro akcenty psané
pomocí mrtvých kláves.
Klávesa AltGr může být použita s alfanumerickými klávesami samostatně.
Například AltGr a L vytvoří Ł. AltGr a 4 (na některých rozvrženích
klávesnice i AltGR a E) dá znak evropské měny, €.
Odkazy
Obsah tohoto dokumentu je licencován pod licencí Creative Commons -
Attribution / Share Alike.
|