Aviso :
Este documento não é válido e não é mais mantido.
|
Usando UTF-8 com o Gentoo
1.
Codificação de caracteres
O que é uma codificação de caracteres?
Os computador não entendem texto por si só. Ao invés disso, cada caractere é
representado por um número. Tradicionalmente, cada conjunto de números usados
para representar alfabetos e caracteres (conhecido como sistema de codificação,
conjunto de codificação ou caracteres) era limitado em tamanho devido a
limitações de hardware de computador.
A história da codificação de caracteres
O conjunto mais comum de caracteres (ou pelo menos o mais aceito) é o
ASCII (American Standard Code for Information Interchange). Sabe-se que o
ASCII é o padrão de software com mais sucesso de todos os tempos. O ASCII
moderno foi padronizado em 1986 (ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6)
pelo American National Standards Institute.
O ASCII tem estritamente sete bits, significando que usa padrões de dígitos
representáveis por sete digitos binários, o que fornece um alcance de 0 a 127 em
decimais. Isto inclui 32 caracteres de controle não visíveis, a maior parte
entre 0 e 31, com o caractere de controle final, DEL ou delete em 127. Os
caracteres de 32 a 126 são caracteres visíveis: um espaço, marcas de pontuação,
letras latinas e números.
O oitavo bit em ASCII era originalmente usado como um bit de paridade para a
verificação de erros. Se isto não é desejado, é deixado como 0. Isto significa
que, com ASCII, cada caractere é representado por um único byte.
Embora o ASCII fosse suficiente para comunicação em inglês moderno, em outras
línguas européias que incluem caracteres acentuados as coisas não foram tão
fáceis. Os padrões ISO 8859 foram desenvolvidos para satisfazer essas
necessidades. Eles eram compatíveis com ASCII, mas ao invés de deixar o oitavo
bit em branco, era usado para permitir mais 127 caracteres em cada codificação.
As limitações do ISO 8859 logo vieram à luz, e existem atualmente 15 variantes
do padrão ISO 8859 (de 8859-1 até 8859-15). Fora do alcance de bytes do conjunto
de caracteres compatível com ASCII, existe freqüentemente um conflito entre as
letras representadas por cada byte. Para complicar a interoperabilidade de
codificações de caracteres ainda mais, Windows-1252 é usado em algumas versões
do Microsoft Windows para línguas do oeste europeu. Este é um super-conjunto de
ISO 8859-1, todavia diferente de várias maneiras. Todos conjuntos, porém, têm
compatibilidade com ASCII.
O desenvolvimento necessário de codificações completamente diferentes para
alfabetos não-latinos, como a EUC (Extended Unix Coding), que é usado para
japonês e coreano (e em menor escala para chinês) criou mais confusão, enquanto
outros sistemas operacionais ainda usavam diferentes conjuntos de caracteres
para as mesmas línguas, por exemplo, Shift-JIS e ISO-2022-JP. Usuários que
desejassem ver glifos em cirílico tinham que escolher entre KOI8-R para russo e
búlgaro ou KOI8-U para ucraniano, bem como todas as codificações de cirílico
como o mal-sucedido ISO 8859-5, e o mais conjunto mais comum Windows-1251. Todos
destes conjuntos de caracteres quebraram grande parte da compatibilidade com
ASCII (embora a codificação de KOI8 colocasse os caracteres cirílicos em ordem
latina, então caso o oitavo bit fosse tirado, o texto ainda é decifrável em um
terminal ASCII através de transliteração reversa.)
Isto levou a muita confusão, e também a uma quase total falta de capacidade para
comunicação multi-língüe, especialmente em diferentes alfabetos. Aqui entra o
Unicode.
O que é Unicode?
O Unicode livra-se da limitação de um único bit tradicional dos conjuntos de
caracteres. Ele usa 17 "planos" de 65,536 pontos de código para descrever um
máximo de 1,114,112 caracteres. Já que o primeiro plano, conhecido como
"Basic Multilingual Plane" ou BMP, contém quase tudo que você precisará usar,
muitos fizeram a presunção errada de que o Unicode era um conjunto de caracteres
de 16 bits.
O Unicode foi mapeado de diversas maneiras, mas os dois mais comuns são o
UTF (Unicode Transformation Format) e UCS (Universal Character
Set). O número após UTF indica o número de bits em uma unidade, enquanto o
número após UCS indica o número de bytes. UTF-8 tornou-se o meio mais comum de
intercâmbio de texto em Unicode como resultado de sua natureza limpa de oito
bits, e é o assunto deste documento.
UTF-8
O UTF-8 é uma codificação de caracteres de tamanhos variáveis, o que neste
exemplo significa que usa de 1 a 4 bytes por símbolo. Então, o primeiro byte de
UTF-8 é usado para codificar ASCII, dando ao conjunto de caracteres
compatibilidade com ASCII. UTF-8 significa que ASCII e caracteres latinos são
intercambiáveis com pouco aumento no tamanho dos dados, porque somente o
primeiro bit é usado. Usuários de alfabetos orientais como japonês, a quem foram
designados um alcance de bytes maior são menos felizes, já que isso resulta em
até 50% de redundância em seus dados.
O que UTF-8 pode fazer por você
UTF-8 permite que você trabalhe em um ambiente multi-língüe e internacionalmente
aceito que atende a padrões, com uma redundância de dados comparativamente
baixa. UTF-8 é o modo preferível de transmitir-se caracteres não-ASCII através
da Internet, através de E-Mail, IRC ou qualquer outro meio. Apesar disso, muitas
pessoas consideram UTF-8 em comunicação online um excesso. É sempre melhor saber
sobre a atitude em relação a UTF-8 em um canal específico, lista de e-mails ou
grupo de Usenet antes de usar UTF-8 em formato não-ASCII.
2.
Configurando UTF-8 com o Gentoo Linux
Encontrando ou criando locales de UTF-8
Agora que você entende os princípios por trás do Unicode, você está pronto para
começar a usar UTF-8 em seu sistema.
O requisito preliminar para UTF-8 é ter uma versão do glibc instalada que tenha
suporte de línguas nacionais. O meio recomendado de fazer-se isso é o arquivo
/etc/locales.build com combinação com a opção de USE
userlocales. Está além do foco deste guia explicar o uso deste arquivo,
embora, para nossa sorte, o uso do arquivo é bem documentado com comentários
nele. Também é explicado no Guia de localização do
Gentoo Linux.
A seguir, precisamos decidir se uma locale de UTF-8 já está disponível para
nossa língua, ou se precisamos criar uma.
Listagem de código 2.1: Buscando um locale de UTF-8 existente |
# locale -a | grep 'en_GB'
en_GB
en_GB.UTF-8
|
Da saída da linha de comando, temos que obter o resultado com um sufixo
semelhante a .utf8. Se não há resultado com um sufixo semelhante a
.utf8, precisamos criar um locale compatível com UTF-8.
Nota:
Só execute a seguinte listagem de código se você não tiver um locale de UTF-8
disponível para sua língua.
|
Listagem de código 2.2: Criando um locale de UTF-8 |
# localedef -i en_GB -f UTF-8 en_GB.utf8
|
Outra maneira de incluir um locale de UTF-8 é adicioná-lo ao arquivo
/etc/locales.build e reconstruir o glibc com a opção de USE
userlocales configurada.
Listagem de código 2.3: Linha em /etc/locales.build |
en_GB.UTF-8/UTF-8
|
Configurando o locale
Existe uma variável de ambiente que precisa ser configurada para poder usar
nossos novos locales de UTF-8: LC_ALL (esta variável sobrecarrega o
ajuste LANG também). Também há vários modos de configurá-la; algumas
pessoas preferem só ter um ambiente de UTF-8 para um usuário específico, caso em
que configuram seu ~/.profile (se você usar /bin/sh),
~/.bash_profile ou ~/.bashrc (se você usar
/bin/bash).
Outros preferem configurar o locale globamente. Uma circunstância específica
onde o autor particularmente recomenda fazê-lo é quando o
/etc/init.d/xdm estiver em uso, porque este script de init inicia o
gerenciador de display e desktop antes de quaisquer arquivos de inicialização de
shell serem lidos, e logo antes de quaisquer variáveis estarem no ambiente.
Configurar o locale globamente deve ser feito usando o
/etc/env.d/02locale. O arquivo deve parecer-se algo como o
seguinte:
Listagem de código 2.4: Demonstração de /etc/env.d/02locale |
LC_ALL="en_GB.UTF-8"
|
A seguir, o ambiente deve ser atualizado com a mudança.
Listagem de código 2.5: Atualizando o ambiente |
# env-update
>>> Regenerating /etc/ld.so.cache...
* Caching service dependencies ...
# source /etc/profile
|
Agora, rode locale sem argumentos para ver se nós temos as variáveis
corretas em nosso ambiente:
Listagem de código 2.6: Verificando se nosso novo locale está no ambiente |
# locale
LANG=
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8
|
Isto é tudo. Você está agora usando locales de UTF-8, e o próximo passo é a
configuração de aplicações que você usa rotineiramente.
3.
Suporte de aplicações
Quando o Unicode começou a ganhar momento no mundo do software, conjuntos de
caracteres de múltiplos bits não funcionavam bem com línguas como C, na qual
muitos dos programas de uso diário são escritos. Até hoje, alguns programas não
são capazes de lidar com UTF-8 adequadamente. Felizmente, a maioria é!
Nomes de arquivo, NTFS e FAT
Existem várias opções de NLS no menu de configuração de kernel do Linux, mas é
importante não se confundir! Para a maior parte, a única coisa que você precisa
fazer é construir suporte de UTF-8 NLS no kernel, e mudar a opção padrão de NLS
para utf8.
Listagem de código 3.1: Passos de configuração do kernel para UTF-8 NLS |
File Systems -->
Native Language Support -->
(utf8) Default NLS Option
<*> NLS UTF8
|
Se você planeja montar partições NTFS, você pode ter que especificar uma opção
nls= para o mount. Se você planeja montar partições FAT, você precisa
especificar uma opção codepage= com o mount. Opcionalmente, você pode
configurar uma codepage padrão para FAT na configuração do kernel. Note que a
opção codepage com mount irá sobrepor-se ao ajuste do kernel.
Listagem de código 3.2: ajustes de FAT na configuração do kernel |
File Systems -->
DOS/FAT/NT Filesystems -->
(437) Default codepage for fat
|
Você deve evitar configurar Default iocharset for fat como UTF-8, já que
não é recomendado. Ao invés disso, você deve passar a opção utf8=true quando
montar suas partições FAT. Para mais informações, veja man mount e a
documentação do kernel em
/usr/src/linux/Documentation/filesystems/vfat.txt.
Para mudar a codificação dos nomes de arquivos, app-text/convmv pode ser
usado.
Listagem de código 3.3: Exemplo de uso de convmv |
# emerge --ask app-text/convmv
# convmv -f <codificação-atual> -t utf-8 <nomedoarquivo>
# convmv -f iso-8859-1 -t utf-8 nomedoarquivo
|
Para mudar o conteúdo dos arquivos, use o utilitário iconv, que
vem com o glibc:
Listagem de código 3.4: Exemplo de uso de iconv |
# iconv -f iso-8859-1 -t utf-8 nomedoarquivo
# iconv -f iso-8859-1 -t utf-8 nomedoarquivo > novoarquivo
|
app-text/recode também pode ser usado para este propósito.
O console de sistema
Importante:
Você precisa de >=sys-apps/baselayout-1.11.9 para Unicode no console.
|
Para ativar UTF-8 no console, você deve editar o /etc/rc.conf e
configurar UNICODE="yes", e também ler os comentários no arquivo -- é
importante ter uma fonte que tem um bom alcance de caracteres se você planeja
tirar proveito do Unicode.
A variável KEYMAP, ajustada em /etc/conf.d/keymaps, deve ter
um mapa de teclado de Unicode especificado.
Listagem de código 3.5: Exemplo de trecho de /etc/conf.d/keymaps |
KEYMAP="uk"
|
Ncurses e Slang
Nota:
Ignore qualquer menção de Slang nesta seção se você não o tem instalado ou não o
usa.
|
É sábio adicionar unicode nas suas opções de USE globais em
/etc/make.conf, e fazer novo emerge de sys-libs/ncurses e
sys-libs/slang, caso necessário. O Portage irá fazer isto automaticamente
quando você atualizar seu sistema:
Listagem de código 3.6: Atualizando seu sistema |
# emerge --update --deep --newuse world
|
Nós também precisamos re-construir pacotes que ligam a estes, agora que as
opções de USE foram aplicadas. A ferramenta que nós usamos
(revdep-rebuild) é parte do pacote gentoolkit.
Listagem de código 3.7: Re-construindo programas que fazem ligação a ncurses ou slang |
# revdep-rebuild --soname libncurses.so.5
# revdep-rebuild --soname libslang.so.1
|
KDE, GNOME e Xfce
Todos principais ambientes de desktop tem suporte total a Unicode, e não
precisarão configurar mais do que já foi coberto neste guia. Isto é porque os
toolkits gráficos (Qt ou GTK+2) são cientes de UTF-8. Subseqüentemente, todas
aplicações rodando em cima dos toolkits devem ser cientes de UTF-8 sem ajustes
adicionais.
As exceções à regra estão em Xlib e GTK+1. O GTK+1 precisa de uma FontSpec
iso-10646-1 no ~/.gtkrc, por exemplo
-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1. Também, aplicações que usam
Xlib ou Xaw precisarão de uma FontSpec semelhante, caso contrário não irão
funcionar.
Nota:
Se você tiver uma versão do control center do gnome1, use-o ao invés disso.
Escolha qualquer fonte de iso10646 de lá. |
Listagem de código 3.8: Exemplo de ~/.gtkrc (para GTK+1) que define uma fonte compatível com Unicode |
style "user-font"
{
fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1"
}
widget_class "*" style "user-font"
|
Se uma aplicação tiver suporte tanto para uma GUI de Qt quanto de GTK+2, a GUI
de GTK+2 irá geralmente dar melhores resultados com Unicode.
X11 e fontes
Importante:
x11-base/xorg-x11 tem suporte de fontes para Unicode muito melhor que
XFree86 e é muito recomendável.
|
Fontes TrueType têm suporte para Unicode, e maior parte das fontes que vêm com o
Xorg tem suporte de caracteres impressionante, embora, obviamente, nem todo
glifo disponível em Unicode tenha sido criado para aquela fonte. Para construir fontes
(incluindo o conjunto Bitstream Vera) com suporte para letras do leste asiáticos para X,
certifique-se que você tem a opção de USE cjk ativa. Muitas outras aplicações
usam a opção, então é uma boa idéia tê-la como uma opção permanente.
Também, vários pacotes de fonte no Portage são cientes de Unicode.
Listagem de código 3.9: Opcional: instale mais fontes cientes de Unicode |
# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts
|
Gerenciadores de janela e emuladores de terminal
Gerenciadores de janela não construídos com GTK ou Qt geralmente tem suporte
muito bom a Unicode, já que freqüentemente usam a biblioteca Xft para lidar com
fontes. Se seu gerenciador de janelas não usar Xft para fontes, você ainda pode
usar a FontSpec mencionada na seção anterior como uma fonte de Unicode.
Emuladores de terminal que usam Xft e suportam Unicode são mais difíceis de
aparecer. Fora o Konsole o gnome-terminal, as melhores opções no Portage são
x11-terms/rxvt-unicode, xfce-extra/terminal,
gnustep-apps/terminal, x11-terms/mlterm, ou simplesmente
x11-terms/xterm quando construídos com a opção de USE unicode e
invocados com uxterm. app-misc/screen também suporta UTF-8, quando
invocada com screen -U ou quando o seguinte é colocado no
~/.screenrc:
Listagem de código 3.10: ~/.screenrc para UTF-8 |
defutf8 on
|
Vim, Emacs, Xemacs e Nano
O Vim fornece suporte completo de UTF-8, e também tem detecção interna de
arquivos UTF-8. Para mais informações sobre o Vim, use :help mbyte.txt.
O Emacs 22.x e superiores também têm suporte completo e UTF-8. O Xemacs 22.x
ainda não suporta combinação de caracteres.
As versões inferiores de Emacs e/ou Xemacs podem necessitar que você instale
app-emacs/mule-ucs e/ou app-xemacs/mule-ucs
e adicione o seguinte código em seu ~/.emacs para ter suporte a
línguas CJK em UTF-8:
Listagem de código 3.11: Suporte a CJK UTF-8 de Emacs |
(require 'un-define)
(require 'jisx0213)
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
|
Atualmente o nano não fornece suporte de UTF-8, embora já esteja planejado
por bastante tempo. Com sorte, isto mudará no futuro. Na época desta escrita,
suporte de UTF-8 está no CVS do nano, e deve ser incluído no próximo lançamento.
Shells
Atualmente, bash fornece suporte total de Unicode a través da biblioteca
GNU readline. Usuários de Z Shell estão em uma posição um pouco pior -- nenhuma
parte da shell tem suporte a Unicode, embora haja um esforço para adicionar
suporte a conjuntos de caracteres de múltiplos bits no momento.
A C shell, tcsh e ksh não têm nenhum suporte de UTF-8.
Irssi
Irssi tem suporte completo de UTF-8, embora precise de que o usuário configure
uma opção.
Listagem de código 3.12: Ativando UTF-8 no Irssi |
/set term_type UTF-8
|
Para canais onde caracteres não-ASCII são freqüentemente trocados em conjuntos
de caracteres não-UTF-8, o comando /recode pode ser usado para converter
os caracteres. Digite /help recode para mais informações.
Mutt
O agente de e-mail de usuário Mutt também tem bom suporte a Unicode. Para usar
UTF-8 com o Mutt, você não precisa colocar nada em seus arquivos de
configuração. O Mutt irá funcionar em um ambiente unicode sem modificação se
todos seu arquivos (inclusive a assinatura) estiverem codificados em UTF-8.
Nota:
Você pode ainda ver '?' em correio que você ler com Mutt. Isto é o resultado de
pessoas que usam um cliente de correio que não indica o código de caracteres
usado. Você não pode fazer mais que pedir para que configurem seu cliente
corretamente.
|
Mais informações estão disponíveis no Mutt Wiki.
Less
Nós usamos muito more ou less junto com | para poder ver a
saída de um comando corretamente, como para o exemplo dmesg | less.
Embora o more só precise do shell para compreender UTF-8, o less
precisa de uma variável de ambiente configurada, LESSCHARSET para
certificar que os caracteres de unicode são desenhados corretamente. Isto pode
ser configurado em /etc/profile ou ~/.bash_profile.
Abra o editor de sua escolha e adicione a seguinte linha a um dos arquivos
mencionados acima.
Listagem de código 3.13: Configurando a variável de ambiente para o less |
LESSCHARSET=utf-8
|
Man
Páginas de man são uma parte integral de qualquer máquina rodando Linux. Para
ter certeza de que qualquer unicode em suas páginas de man sejam desenhados
corretamente, edite /etc/man.conf e troque uma linha como mostrado
abaixo.
Listagem de código 3.14: mudanças no man.conf para suporte a Unicode |
NROFF /usr/bin/nroff -Tascii -c -mandoc
NROFF /usr/bin/nroff -mandoc -c
|
elinks e links
Estes dois são navegadores de texto comumente usados, e veremos como podemos
ativar suporte a UTF-8 neles. No elinks e no links, existem dois
jeitos de fazê-lo, um usando a opção Setup de dentro do navegador ou editando o
arquivo de configuração. Para configurar a opção através do navegador, abra um
site com elinks ou links e aperte Alt+S para entrar no
Setup Menu e selecione Terminal options, ou aperte T. Desça e selecione
a última opção UTF-8 I/O apertando Enter. Então salve e saia do menu. No
links você pode ter que repetir Alt+S e apertar S para
salvar. A opção do arquivo de configuração é mostrada abaixo.
Listagem de código 3.15: Ativando UTF-8 para elinks/links |
set terminal.linux.utf_8_io = 1
terminal "xterm" 0 1 0 us-ascii utf-8
|
Testando tudo
Existem vários websites para teste de UTF-8. net-www/w3m,
net-www/links, net-www/elinks, net-www/lynx e todos
navegadores baseados no Mozilla (incluindo o Firefox) têm suporte a UTF-8. O
Konqueror e Opera também têm suporte completo a UTF-8.
Quando estiver usando um dos navegadores da web somente de texto, tenha certeza
de que você está usando um terminal ciente de Unicode.
Se você vir certos caracteres exibidos como caixas com letras ou números dentro,
isto significa que a sua fonte não tem o caractere ou glifo para o símbolo que o
UTF-8 deseja. No caso, ele mostra uma caixa com o código hexadecimal do símbolo
em UTF-8.
Métodos de entrada
Dead keys pode ser usado para digitar caracteres no X que não são
incluídos no seu teclado. Eles funcionam apertando a tecla Alt (ou em alguns
países, AltGr) e uma tecla opcional da seção não-alfabética do teclado à
esquerda da tecla de enter uma vez, soltando elas, e pressionando uma letra. A
dead key deve modificá-la. A entrada pode ser modificada mais ainda usando a
tecla Shift apertando ao mesmo tempo AltGr e um modificador.
Para ativar dead keys no X, você precisa de um arranjo que o suporte. A maior
parte dos arranjos europeus têm dead keys como uma variante padrão. No entanto,
isto não vale para arranjos norte-americanos. Embora haja um grau de
inconsistência entre os arranjos, a solução mais fácil parece ser usar um
arranjo na forma "en_US" ao invés de "us", por exemplo. O arranjo é configurado
no /etc/X11/xorg.conf desta maneira:
Listagem de código 3.16: trecho de /etc/X11/xorg.conf |
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "en_US"
EndSection
|
Nota:
A mudança precedente só precisa ser aplicada se você estiver usando um arranjo
norte-americano, ou outro arranjo que não funciona com dead keys. Usuários
europeus devem ter suas dead keys funcionando sem modificações.
|
Está mudança entrará em efeito quando seu servidor de X for reiniciado. Para
aplicar a mudança agora, use a ferramenta setxkbmap, por exemplo,
setxkbmap en_US.
É provavelmente mais fácil descrever dead keys com exemplos. Embora os
resultados dependam do locale, os conceitos devem permanecer os mesmos
independente do locale. Os exemplos contêm UTF-8, então para vê-los você precisa
ou falar para seu navegador ver a página como UTF-8, ou já ter um locale de
UTF-8 configurado.
Quando aperto AltGr e [ juntos, solto-os, e então aperto a, 'ä' é produzido.
Quando aperto AltGr e [ juntos, solto-os, e então aperto e, 'ë' é produzido.
Quando aperto AltGr e ; juntos, 'á' é produzido, quando aperto AltGr e ; juntos,
solto-os, e aperto e, 'é' é produzido.
Ao apertar AltGr, Shift e [ juntos, soltá-los, e apertar a, um 'å' escandinavo é
produzido. De maneira semelhante, quando aperto AltGr, Shift e [ juntos, solto
só o [, e aperto-o novamente, um '˚' é produzido. Embora pareça-se com
um, este símbolo (U+02DA) não é igual ao símbolo de graus (U+00B0). Isto
funciona com outros acentos produzidos por dead keys — AltGr e [, soltando só o
[, apertando-o novamente e tendo '¨'.
AltGr pode ser usado com teclas alfabéticas sozinhas. Por exemplo, AltGr e m,
uma letra grega minúscula mu é produzida: 'µ'. AltGr e s produzem um scharfes s
ou esszet: 'ß'. Como muitos usuários europeus esperam (já que está marcado em
seus teclados), AltGr e 4 (ou E dependendo do arranjo do teclado) produzem
um símbolo do Euro, '€'.
Recursos
O conteúdo deste documento está licenciado pela licença Creative Commons -
Attribution / Share Alike.
|