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