Provided by: manpages-pt_20040726-2_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)