Neste artigo, saiba mais sobre estes conceitos:
- Códigos de caracteres e páginas de código
- Como os conjuntos de caracteres funcionam com clientes Windows
- Bibliotecas de código de conversão
- Configuração do Samba para internacionalização
Este artigo ajuda na preparação para o Objetivo 312.6 no Tópico 312 do exame de especialidade de Ambiente Misto do Linux Professional Institute (LPI) (302). O objetivo tem peso 1.
Para aproveitar ao máximo os artigos desta série, é necessário ter um conhecimento avançado de Linux e um sistema Linux funcional, no qual seja possível praticar os comandos mencionados neste artigo. Especificamente, este artigo pressupõe que você tenha um conhecimento de trabalho das funções de linha de comando do Linux e, pelo menos, um entendimento geral do propósito do Samba, conforme o explicado em Learn Linux, 302 (Mixed environments): Concepts. Para executar as ações descritas neste artigo, é necessário ter o software Samba instalado. Além disso, você deverá ter as bibliotecas da GNU Compiler Collection instaladas, juntamente com acesso à rede e à Internet. Um cliente Windows na rede será útil para testar nomenclatura não inglesa.
Entendendo internacionalização
Se você estiver em um ambiente misto, é provável que seus usuários prefiram trabalhar com arquivos e diretórios de seu próprio código de idioma. Um locale é simplesmente um conjunto de parâmetros que define o idioma do usuário, o país e quaisquer outras preferências que o usuário poderá usar e visualizar no ambiente de computação. Quando o software é capaz de ser executado do código de idioma de um usuário, isso é comumente chamado de internacionalização ou i18n.
Digamos que você esteja percorrendo diretórios em seu computador usando o Nautilus no Linux ou o Windows Explorer no Windows e encontra um diretório chamado 01100001 01110000 01110000 01101100 01101001 01100011 01100001 01110100 01101001 01101111 01101110 01110011. Ou talvez o computador exiba o diretório como 97 112 112 108 105 99 97 116 105 111 110 115 ou 61 70 70 6C 69 63 61 74 69 6F 6E 73. A não ser que você saiba ler binário, decimal ou hexadecimal, ou tenha um conversão à mão, nunca saberá que aquele diretório é um diretório compartilhado com o nome de applications. No entanto, seu computador de fato entende números. De fato, números são tudo o que o computador entende.
Ainda bem que você não precisa aprender binário, hexadecimal, decimal ou qualquer outro sistema de numeração só para usar o computador, pois os conversores exibem caracteres de linguagem legível. Na base dessa conversão, está o código de caracteres. Um código de caracteres é a representação em forma numérica de um mapeamento particular de caracteres de numérico para um caractere particular. A Tabela 1 mostra os códigos de caracteres American Standard Code for Information Interchange (ASCII) para um dado diretório.
Tabela 1. Códigos de caracteres ASCII para um diretório chamado "applications"
| Binário | Decimal | Hexadecimal | Caractere representado |
|---|---|---|---|
| 01100001 | 97 | 61 | a |
| 01110000 | 112 | 70 | p |
| 01110000 | 112 | 70 | p |
| 01101100 | 108 | 6C | l |
| 01101001 | 105 | 69 | i |
| 01100011 | 99 | 63 | c |
| 01100001 | 97 | 61 | a |
| 01110100 | 116 | 74 | t |
| 01101001 | 105 | 69 | i |
| 01101111 | 111 | 6F | o |
| 01101110 | 110 | 6E | n |
| 01110011 | 115 | 73 |
Esse exemplo é útil se seu código de idioma funcionar com ASCII. No entanto, com a globalização das redes de computadores, mais usuários desejam trabalhar em seus códigos de idioma.
Dê um passo atrás no tempo por um momento, para os primeiros dias da rede de computadores. A maioria dos softwares foi desenvolvida com inglês em mente. Como tal, os computadores usavam uma representação de caracteres em inglês do ASCII padrão sem problemas. O ASCII padrão atribui um caractere de um único byte no idioma inglês a um valor numérico, como 0 a 127 em formato decimal. À medida que a necessidade expandiu para incluir mais caracteres e símbolos, como aqueles encontrados no francês, no espanhol e em equações matemáticas, foi incluída uma extensão do ASCII. Essa extensão dá um bit adicional para incluir 128 caracteres a mais, com valores na faixa de 128 a 255 em formato decimal. Algumas dessas extensões comuns ao ASCII padrão incluem ISO Latin I, Extended Binary-Coded Decimal Interchange Code (EBCDIC, que a IBM usa) e Extended ASCII (usado pela Microsoft e pelo sistema operacional DOS).
Mas, e se um ambiente de usuário particular prefere chinês, japonês, húngaro, eslovaco ou outro idioma para o qual caracteres ASCII são insuficientes? É no trabalho com esse tipo de código de idioma não inglês que várias páginas de código podem ajudar.
Uma página de códigos é um mapeamento de números para caracteres específicos, conforme definido por um conjunto de caracteres (repertório) destinado para uso em um ou mais códigos de idioma particulares. Uma página de códigos tem sido tradicionalmente conhecida como página de códigos, codificação, conjunto de caracteres e conjunto de caracteres codificados. Apesar de, tecnicamente, os vários nomes terem significados ligeiramente diferentes, esse artigo usa os termos página de códigos, conjunto de caracteres e codificação de forma intercambiável.
Idiomas como chinês, japonês, eslovaco e muitos outros têm páginas de código. A Tabela 2 apresenta algumas das páginas de código comumente usadas.
Tabela 2. Páginas de código comuns
| Página de códigos | Representação |
|---|---|
| 850 | MS-DOS Latin 1 (Western European) |
| 437 | DOS-US, OEM-US |
| 932 | MS-DOS Japanese Shift-JIS |
| 852 | Idiomas da Europa central que usam o sistema de escrita latino |
| 1252 | Windows Western European Language |
| 950 | MS-DOS Traditional Chinese |
| 65001 | UTF-8 (Unicode) |
| 28591 | ISO-8859-1 |
Para trabalhar com espaços de nome em um ambiente não inglês
Como a versão 2.x do Samba não tinha suporte para Unicode, todo o suporte a conjuntos de caracteres de idioma em nomes de arquivo usam uma página de código de idioma particular. Clientes Windows mais antigos usam páginas de código de um byte (ao contrário de vários bytes). No entanto, não há suporte no protocolo Server Message Block (SMB)/Linux Common Internet File System (CIFS) para conversão de código. Portanto, você deverá usar o mesmo conjunto de caracteres quando o Samba se comunicar com um cliente Windows mais antigo.
Se seu ambiente exigir o uso de uma página de códigos específica, é preciso conhecer o significado básico de alguns termos específicos do Samba:
- Conjunto de caracteres UNIX. O conjunto de caracteres que o Linux usa internamente
- Conjunto de caracteres DOS. O conjunto de caracteres que o Samba usa ao se comunicar com clientes Windows mais antigos
- Conjunto de caracteres de exibição. O conjunto de caracteres usado para exibição em tela
Se iconv estiver instalado em seu computador Linux (e provavelmente está),
é possível determinar as páginas de códigos disponíveis usando o comando iconv -l
, como mostra a Listagem 1.
Listagem 1. Listagem parcial das páginas de códigos disponíveis
[tbost@samba ~]# iconv -l The following list contain all the coded character sets known. This does not necessarily mean that all combinations of these names can be used for the FROM and TO command line parameters. One coded character set can be listed with several different names (aliases). 437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110, ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5, BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BRF, BS_4730, CA, CN-BIG5, CN-GB, CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278, CP280, CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424, CP437, CP500, CP737, CP775, CP803, CP813, CP819, CP850, CP851, CP852, CP855, CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV, CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP901, CP902, CP903, CP904, CP905, CP912, CP915, CP916, CP918, CP920, CP921, CP922, CP930, CP932, |
É possível usar o comando locale para exibir o código de idioma atual do computador.
Se for necessário alterar o código de idioma, verifique a documentação de sua distribuição para ver o local do arquivo do código de idioma. Se você alterar o código de idioma, será preciso reinicializar o computador após a alteração. A Listagem 2 mostra um exemplo de código de idioma padrão para um computador executando Linux.
Listagem 2. Código de idioma padrão (Unicode UTF-8) de um computador Linux
[tbost@samba ~]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= |
Na Listagem 2, note que os códigos de idioma são representados como nomes, que são fáceis de entender (ao contrário de muitas das convenções de nomenclatura de páginas de código).
Trabalhando com conjuntos de caracteres
Os métodos antigos de página de código DOS que a versão 9x do Windows e o Samba 2.x usam podem suportar conjuntos de caracteres estendidos, mas não em várias combinações. Por exemplo, espanhol, inglês e francês não podem ser usados juntos. Tenha essa restrição em mente se enfrentar o desafio de dar suporte a vários códigos de idioma dentro desses ambientes.
Se você atualizar do Samba 2.x para o Samba 3.x ou alterar o código de idioma padrão do Samba depois de ter usado um código de idioma não inglês, poderá encontrar muitos arquivos que têm caracteres especiais em seus nomes que não são reconhecíveis. Normalmente, esses nomes se manifestarão em uma sequência corrompida de caracteres. Isso comumente acontece com tremas e acentos, pois esses caracteres eram particulares ao código de página que estava em uso anteriormente.
Se você pretende nomear seu servidor Samba usando caracteres não ingleses, assegure-se de que o código de idioma que o Samba está usando seja o mesmo que o código de idioma do computador Linux. É aqui que a diretiva de conjunto de caracteres tem uma função importante na definição adequada da configuração do Samba.
Uso de bibliotecas de conversão de código
iconv (libiconv) é um programa com licença GNU que converte de uma codificação para outra. O Samba baseia-se no
iconv estar instalado no computador Linux e ter as rotinas necessárias de conversão de conjuntos de caracteres. Apesar de essas conversões não serem sempre perfeitas, a ferramenta executa seu trabalho relativamente bem.
Se houver uma incompatibilidade no conjunto de caracteres, isso provavelmente resultará na exibição de sequências aleatórias de caracteres ilegíveis. No entanto, um caractere específico que não seja suportado dentro das mesmas páginas de código para um computador Linux ou Windows provavelmente exibirá um ponto de interrogação (?) para o código de caractere não suportado.
Nesses cenários, erros são geralmente gravados no arquivo de log do Samba, o que poderá fornecer
insight adicional sobre a raiz do problema. Em tais casos, é preciso investigar um pouco mais fundo sobre como códigos de caracteres são convertidos usando páginas de códigos no servidor Samba.
Também poderá ser necessário compilar a biblioteca libiconv para dar suporte a uma página de códigos específica ou aplicar uma correção quando caracteres complexos de vários bytes forem usados, como aqueles em japonês. Se seu código de idioma for para o idioma japonês, é possível que tenha trabalho adicional para compilar a biblioteca
libiconv e, a seguir, aplicar uma correção disponível.
CP932 (também conhecido como shift_jis
e Windows-31J) é a página de códigos da Microsoft usada para japonês.
A biblioteca libiconv contém um conversor CP932 que converte a página de códigos do
Windows para Unicode. No entanto, é necessária uma correção para fazer as conversões certas. A Listagem 3 mostra o código para usar tal biblioteca.
Listagem 3. Correção, compilação e instalação da biblioteca libiconv para CP932
[tbost@samba ~]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz [tbost@samba ~]# wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.13-cp932.patch.gz [tbost@samba ~]# tar -xvzf libiconv-1.13.tar.gz [tbost@samba ~]# cd libiconv-1.13 [tbost@samba ~]# gzip -dc ../libiconv-1.13-cp932.patch.gz | patch -p1 [tbost@samba libiconv-1.13]# ./configure --prefix=/usr/local/lib/libiconv [tbost@samba libiconv-1.13]# make [tbost@samba libiconv-1.13]# sudo make install [tbost@samba libiconv-1.13]# /usr/local/lib/libiconv/bin/iconv -l | egrep -i '(-31j|-ms)' EUC-JP-MS EUCJP-MS EUCJP-WIN EUCJPMS |
A sequência de etapas na Listagem 3 é a seguinte:
- Faça download do código de origem de
libiconv. - Faça download da correção para CP932.
- Descompacte o arquivo tar do código de origem de
libiconv. - Altere o diretório para o recém-criado diretório libiconv-1.13.
- Configure o diretório usando o diretório /usr/local/lib/libiconv directory como o local no qual instalar os arquivos.
- Compile o código de origem e, a seguir, instale a ferramenta usando permissões sudo.
- Verifique se a correção foi aplicada.
Conversão de arquivos e diretórios existentes
Para manter consistência com nomenclatura, pode-se desejar converter os nomes de um conjunto de caracteres para outro se os diretórios e os arquivos já tiverem sido nomeados usando um conjunto de caracteres anterior. A ferramenta convmv , escrita em
in Perl, faz um bom trabalho ao converter de um conjunto de caracteres para outro.
O código na Listagem 4 faz o download do tarball compactado e, a seguir, extrai seu conteúdo.
Como convmv é um script
Perl, não é necessária compilação. O comando final instrui o
convmv a converter recursivamente todos os arquivos em iso-8859-8
(Latin/Hebrew) para Unicode UTF-8.
Listagem 4. Convertendo nomes de arquivos com convmv
[tbost@samba /]# wget http://www.j3e.de/linux/convmv/convmv-1.14.tar.gz [tbost@samba /]# tar -xzvf convmv-1.14.tar.gz [tbost@samba /]# cd convmv-1.14 [tbost@samba convmv-1.14]# sudo ./convmv -f iso-8859-8 -t utf8 -r --notest --replace /applications |
Configuração do Samba para internacionalização
A partir da versão 3 do Samba, o Unicode é a codificação padrão, que permite suporte à internacionalização sem alterações de configuração—desde que todos os clientes possam negocias Unicode com sucesso. No entanto, se você usar o Samba 2.x ou quando o Samba tiver clientes Windows mais antigos na rede, é preciso ajustar o arquivo de configuração do Samba, instruindo-o a usar seu código de idioma.
Quando as bibliotecas adequadas de conversão de caracteres estiverem instaladas, a configuração do Samba para internacionalização é direta. Tenha em mente que o protocolo CIFS suporta conjuntos de caracteres não ingleses na rede e não deverá precisar de alterações.
Ativação de conjuntos de caracteres
Suponha que você deseje configurar o Samba 3 para suporte ao cliente Windows em espanhol. Se desejar configurar um código de idioma diferente, use as opções adequadas de parâmetro de conjunto de caracteres DOS e UNIX. Caso contrário, a configuração deverá ser a mesma.
Para ativar conjuntos de caracteres, complete essas etapas:
- Como prática recomendada, crie um backup do arquivo smb.conf.
- Abra smb.conf em seu editor de texto favorito.
- Nas configurações globais, adicione as seguintes diretivas:
#======================= Global Settings ======================= [global]dos charset = CP850 unix charset = ISO8859-1
As definições de configuração acima fornecem um exemplo para usar a página de códigos 850 em clientes Windows, enquanto o código de idioma do servidor Samba está definido para IS08859-1. Sua configuração provavelmente usará uma página de códigos e um código de idioma diferentes.
- Teste se a nova configuração apresenta quaisquer erros de sintaxe ou de conjunto de caracteres não suportados:
[tbost@samba /]# testparm -v Load smb config files from /etc/samba/smb.conf rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
Uma mensagem
Loaded services file OKdeverá ser retornada. Se quaisquer avisos ou erros aparecerem relacionados à conversão do conjunto de caracteres, assegure-se de quelibiconvsuporta o conjunto de caracteres desejado. - Reinicie o Samba ou recarregue o arquivo de configuração.
Agora, tente conectar a um cliente Windows e navegue em diretórios contendo um acento ou outro caractere não inglês:
[tbost@samba /]# smbclient -U tbost //windowsclientname/applications Enter tbost's password: |
Aqui, windowslcientname é o nome NetBIOS do cliente
Windows em sua rede, enquanto applications
é o diretório compartilhado no cliente Windows. Depois de conectar ao compartilhamento, navegue para uma listagem de diretórios contendo caracteres que não estejam em inglês e verifique se são exibidos corretamente.
Aprender
-
Revise uma listagem de identificadores de páginas de códigos da IBM
e saiba mais sobre como a IBM categoriza páginas de códigos para vários idiomas.
-
Revise uma listagem de identificadores de páginas de códigos da Microsoft
e saiba mais sobre as páginas de códigos Windows disponíveis para vários idiomas.
-
O Capítulo
30 do manual do Samba discute Unicode com Samba 3.x e correção de
iconvpara suporte ao idioma japonês. -
Saiba mais sobre a ativação de
SWAT para suporte à internacionalização no manual do Samba e use SWAT para gerenciar ambientes em idioma não inglês.
-
Saiba mais sobre GNU
libiconve entenda um pouco mais sobre como ela converte conjuntos de caracteres. -
No programa LPIC
você encontra objetivos detalhados, listas de tarefas e amostras de perguntas referentes aos três níveis da certificação em administração de sistemas Linux do LPI. Especificamente, veja os objetivos detalhados do LPI-302 e a
tarefas e amostras de perguntas.
-
Revise toda a série de preparação para os exames LPI no developerWorks, para saber mais sobre os fundamentos do Linux e se preparar para a certificação de administrador de sistemas, com base nos objetivos do exame LPI anteriores a abril de 2009.
-
Exam Preparation Resources for Revised LPIC Exams fornece uma lista de outros recursos de treinamento para certificação mantidos pelo LPI.
-
Na zona Linux do developerWorks, encontre vários artigos de instruções e tutoriais , bem como downloads, fóruns de discussão e uma variedade de outros recursos para desenvolvedores e administradores Linux.
-
Siga o DeveloperWorks no Twitterou inscreva-se para receber tweets sobre Linux no developerWorks.
-
Fique por dentro dos eventos técnicos e webcasts do developerWorks com foco em uma variedade de produtos IBM e tópicos do segmento de mercado de TI.
-
Participe de um briefing gratuito do developerWorks para se atualizar rapidamente sobre produtos e ferramentas IBM, bem como tendências do segmento de mercado de TI.
-
Acompanhe as demos on demand no developerWorks que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidades avançadas para desenvolvedores experientes.
Discutir
-
Participe da comunidade My developerWorks. Conecte-se a outros usuários do developerWorks, ao mesmo tempo que explora os blogs, fóruns, grupos e wikis direcionados a desenvolvedores.

Tracy Bost é desenvolvedor de software e engenheiro de sistemas experiente. Ele também é palestrante e instrutor do sistema operacional Linux. Tracy é certificado como Red Hat Certified Engineer (RHCE) e Microsoft Certified Systems Engineer (MCSE), além de ser membro ativo da Linux Foundation. Ele trabalhou em vários segmentos de mercado, incluindo hipotecas, imóveis e o setor sem fins lucrativos.