Provided by: manpages-pt_20040726-5_all bug

NOME

       charsets - Conjuntos de caracteres e internacionalização do ponto de vista do programador

DESCRIÇÃO

       O  linux é um sistema operacional internacional. Vários de seus utilitários e drivers (inclusive o driver
       do  console)  suportam  vários  conjuntos  de  caracteres,  inclusive  acentos,  ligaduras  e   marcações
       diacríticas; além de outros alfabetos, inclusive o grego, cirílico, árabe e hebraico.

       Esta  página  dá  uma  visão  orientada  ao programador das diferentes normas de conjuntos de caracteres,
       explicando como elas se encaixam no linux.   Os  padrões  abordados  incluem  ASCII,  ISO  8859,  KOI8-R,
       Unicode, ISO 2022 e ISO 4873.

ASCII

       ASCII  (American  Standard  Code  For  Information  Interchange)  é  um  conjunto de caracteres de 7 bits
       originalmente criado para o inglês americano. Atualmente é descrito pela norma ECMA-6.

       Há uma variante do ASCII que substitui o símbolo americano para a libra com o símbolo britânico da  libra
       esterlina.  Este  ASCII  é usado na Grã-Bretanha, e é chamado "UK ASCII", sendo o americano designado "US
       ASCII".

       Como o linux foi escrito para hardware americano, ele normalmente suporta o ASCII americano

ISO 8859

       ISO 8859 é um conjunto de 10 conjuntos de caracteres  de  8  bits  que  começam  com  o  ASCII  americano
       (primeiros  128 caracteres), que são seguidos de caracteres de controle invisíveis (posições 128 a 159) e
       96 gráficos de largura fixa nas posições de 160 a 255.

       Destes, o mais importante é o ISO 8859-1 (Latin-1),  que  é  suportado  pelo  driver  do  console  linux,
       razoavelmente bem suportado pelo X11R6 e é o conjunto base do HTML.

       O  suporte aos outros conjuntos do 8859 pelo console pode ser ativado por utilitários como setfont(8) que
       modificam as ações do teclado e a tabela de gráficos EGA e usam a a tabela e fontes mapeada pelo  usuário
       no controlador do console.

       Seguem descrições breves de cada conjunto:

       8859-1 (Latin-1)
              Latin-1  serve  para  a  maioria  das  linguas  européias  ocidentais  como  o  albanês,  catalão,
              dinamarquês, holandês, inglês, finlandês, francês, alemão, galício, irlandês, islandês,  italiano,
              noruegu6es,  português,  espanhol e sueco.  A falta de ligaduras ij (holandês), oe (francês) e das
              aspas ,, e `` do alemão é tolerável.

       8859-2 (Latin-2)
              Latin-2 serve para a maiora das linguas eslavas e centro-européias de escrita latina,  tais  como:
              croata, tcheco, alemão, húngaro, polonês, romeno, eslovaco e esloveno.

       8859-3 (Latin-3)
              Latin-3 é muito utilizado por quem escreve em esperanto, galício, maltês e turco.

       8859-4 (Latin-4)
              Latin-4  contém letras para o estoniano, látvio e lituano. Está basicamente obsoleto, veja 8859-10
              Latin-6.

       8859-5 Cirílico. Suporta búlgaro, bielorusso, macedônio, russo, sérvio e ucraninano. Os ucranianos lêem a
              letra 'ghe' 'heh', e precisariam de um ghe acentuado para escrever esta letra corretamente.   Veja
              a discussão sobre o KOI8-R abaixo.

       8859-6 Suporta árabe. A tabela de glifos do 8859-6 é uma fonte fixa com formas separadas. Para exibi-las,
              um driver tem que conbiná-las usando as formas iniciais, média e final.

       8859-7 Suporta o grego moderno.

       8859-8 Suprota hebraico.

       8859-9 (Latin-5)
              Uma variante do Latin-1 que substitui letras islandesas raramente usadas por letras turcas.

       8859-10 (Latin-6)
              Latin  6  contém  as  letras inuit (Groelandesas) e sami (lapônicas) ausantes do latin-4 de modo a
              abranger toda a área nórdica. O RFC 1345 contém um 'latin6' preliminar que  é  diferente.  O  sami
              skolt requer alguns acentos que estão ausentes nesta versão.

       8859-13 (Latin-7)

       8859-14 (Latin-8)

       8859-15
              Acrescenta o sinal de euro e as ligaduras francesas que estão ausentes no Latin-1.

KOI8-R

       KOI8-R  é um conjunto de caracteres não ISO muito usado na Rússia. A metade inferior é ASCII americano, e
       a superior é um conjunto de caracteres cirílicos um pouco melhor projetado que o do ISO 8859-5.

       O suporte a KOI8-R pelo console é acionado por utilitários que modificam o  mapeamento  do  teclado  e  a
       tabela de gráficos EGA, utilizando a tabela de mapeamento pelo usuário no driver do console.

UNICODE

       Unicode  (ISO  106460  é  uma  norma  que  visa  representar  sem ambigüidade todos os símbolos usados em
       linguagens humanas. A encodificação é em 32 bits (as versões mais antigas usam 16 bits). Mais informações
       sobre o Unicode em <http://www.unicode.com>.

       O linux representa o unicode com o Unicode transfer Format (UTF-8) de 8 bits. UTF-8 representa o  Unicode
       com  comprimento  variável,  usando 1 byte para 7 bits, 2 para 11 bits, 3 para 16 bits, 4 para 21 bits, 5
       para 26 bits e 6 para 31 bits.

       Sejam 0,1,x um zero, um, ou bit arbitrário. Um byte  0xxxxxxx  representa  o  caracter  unicode  00000000
       0xxxxxxx,  que  por  sua vez codifica o mesmo que 0xxxxxxx em ASCII. Assim, o ASCII não é modificado pelo
       UTF-8, e as pessoas que usem apenas ASCII não notarão nenhuma diferença: nem no código nem no tamanho  do
       arquivo.   LP  Um  byte 110xxxxx inicia um código de 2 bytes, e a seqüência 110xxxxx 10yyyyyy é traduzida
       para 00000xxx xxyyyyyy. Um byte 1110xxxx inicia um código de 3 bytes,  e  1110xxxx  10yyyyyy  10zzzzzz  é
       traduzida  para  xxxxyyyy  yyzzzzzz.  Quando  se  usa  UTF-8 para o ISO 10646 de 31 bits, esta progressão
       continua até códigos de 6 bytes.

       Para os usuários de ISO-8859-1 isto significa que os caracteres com o  bit  mais  significativo  presente
       passam  a  ser  codificados com dois bytes. Isto tende a aumentar o tamanho de arquivos de texto em um ou
       dois porcento. Não há problemas de  conversão,  no  entanto,  porque  os  valores  unicode  dos  símbolos
       ISO-8859-1 são iguais aos valores originais no ISO 8859-1 (seguidos por oito bits zero). Para os usuários
       japoneses,  isto  significa que os códigos de 16 bits atualmente usados passam a necessitar de 3 bytes, e
       são necessárias extensas tabelas de mapeamento. Muitos usuários japoneses preferem o ISO 2022 por isso.

       Observe que o UTF-8 é auto-sincronizante: 10xxxxxx inicia, e todo o resto  do  byte  termina  um  código.
       Observe  ainda  que  bytes  ASCII  aparecem  em um fluxo UTF-8 representados unicamente do modo como eles
       aparecem.  É especialmente importante que os NULs e '/' não são modificados.

       Como o ASCII,o NUL  e o '/' não são modificados, o kernel não percebe que o UTF-8 está sendo  usado.  Ele
       não se importa com quais são os significados dos bytes com que ele está lidando.

       A  tradução  de  streams  unicode é normalmente feita por tabelas 'subfont', que associam subconjuntos do
       unicode a glifos. Internamente, o kernel usa unicode para descrever a subfonte carregada na RAM de vídeo.
       Isto significa que se pode usar um conjunto de caracteres com 512 símbolos no  modo  UTF-8.  Isto  não  é
       suficiente para japonês, chinês ou coreano, mas serve para a maioria das outras aplicações.

ISO 2022 AND ISO 4873

       As  normas  ISO  2022  e  4873  descrevem  um modelo de controle de fonte baseado no VT100. Este modelo é
       parcialmente suportado pelo kernel e pelo xterm(1).  É popular no Japão e na Coréia.

       Há quatro conjuntos de caracteres gráficos (G0, G1, G2 e  G3),  um  dos  quais  é  o  conjunto  atual  de
       caracteres  para  códigos  com  o  bit  mais  significativo ausente (inicialmente é o G0), e um deles é o
       conjunto inicial para códigos com este bit presente (inicialmente o G1). Cada conjunto gráfico tem 94  ou
       96 caracteres, e é essencialmente um conjunto de 7 bits. Eles utilizam os códigos de 040 a 0177 (ou 041 a
       0176) ou de 0240 a 0377 (ou de 0241 a 0376).  G0 sempre tem 94 de tamanho e usa os códigos de 041 a 0176.

       A  mudança  entre  os conjuntos de caracteres é feita com as funções de permuta ^N (SO ou LS1), ^O (SI ou
       LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R), ESC } (LS2R), ESC  |  (LS3R).   A
       função  LSn  aciona  o  conjunto  de  caracteres Gn para códigos com o bit mais significativo ausente.  A
       função LSnR aciona o conjunto de caracteres Gn para códigos com o bit  mais  significativo  presente.   A
       função SSn aciona o conjunto de caracteres Gn (n=2 ou 3) para o próximo caracter independente do valor de
       seu bit mais significativo.

       Os  conjuntos  de  caracteres de 94 itens - designado Gn - podem ser ativados pelas seqüências 'ESC ( xx'
       (G0); 'ESC ) xx' (G1), 'ESC * xx' (G2) e 'ESC + xx' (G3); onde xx é um código  definido  pela  norma  ISO
       2375  (conjunto  internacional de conjuntos de caracteres codificados).  Por exemplo, ESC ( @ seleciona o
       conjunto ISO 646 como G0, ESC ( A seleciona o conjunto britânico de caracteres (com o símbolo da libra ao
       invés do número), ESC ( B seleciona ASCII (com o dólar no lugar do símbolo de moeda), ESC (  M  seleciona
       um conjunto de caracteres para linguagens africanas, ESC ( !  seleciona um conjunto de caracteres cubano,
       etc, etc.

       Um  conjunto de caracteres de 96 itens - designado Gn - é ativável pela seqüência ESC - xx (G1), ESC . xx
       (G2) ou ESC / xx (G3).  Por exemplo, ESC - G seleciona o alfabeto hebraico como G1.

       Um conjunto de caracteres com múltiplos bytes - designado Gn - é acionado com as seqüências 'ESC $ xx' ou
       'ESC $ ( xx' (G0), ESC $ ( C coloca o conjunto de caracteres coreano em G0.  O conjunto japonês  invocado
       por ESC $ B tem uma versão mais recente selecionável por 'ESC & @ ESC $ B'.

       ISO  4873  define um conjunto de caracteres mais estreitos, no qual G0 é fixo (sempre ASCII), do modo que
       G1, G2 e G3 só podem ser invocados por códigos com o bit mais significativo  presente.   Especificamente,
       ^N  e  ^O  não  são mais usados, ESC ( xx pode ser usado apenas com xx=B; e ESC ) xx, ESC * xx e ESC + xx
       equivalem a ESC - xx, ESC . xx e ESC / xx respectivamente.

VEJA TAMBÉM

       console(4), console_ioctl(4), console_codes(4), ascii(7), iso_8859_1(7), unicode(7), utf-8(7)

TRADUZIDO POR LDP-BR em 21/08/2000.

       Paulo César Mendes <drps@ism.com.br> (tradução) André L. Fassone Canova <lonelywolf@blv.com.br> (revisão)

Linux                                               5/11/1996                                        CHARSETS(7)