UNICODE(7)

NOME
Unicode - o superconjunto unificado de caracteres

DESCRIÇÃO
O padrão internacional ISO 10646 define o Universal Character Set (UCS). UCS contém todos os caracteres de todos os outros padrões. Ele também garante a compatibilidade retroativa, isto é, as tabelas de conversão podem ser construídas de forma que nenhuma informação seja perdida quando uma cadeia de caracteres é convertida de qualquer outra codificação para UCS e vice-versa. UCS contém os caracteres requeridos para representar quase todas as línguas conhecidas. Isto inclui não somente a latina, grega, cirílica, hebraica, árabe, armênia, e gregoriana, mas também chinesa, japonêsa, e coreana tais como as escritas em ideogramas hiragana, katakana, hangul, devangari, bengali, gurmukhi, gujarati, oriya, tamil, telugu, kannada, malaio, thai, lao, khmer, bopomofo, tibetana, rúnica, etíope, silábica canadense, cherokee, mongol, oghan, myanmar, sinhalam thaana, yi e muitas outras. Para escritas ainda não cobertas, pesquisas de como se fazer a codificação para o computador ainda são realizadas e elas serão eventualmente adicionadas. Isto não inclue somente simbolos gráficos e várias linguagens históricas indo-européias mas, também, escritas artistícas como o tengwar, cirth e klingon. A UCS também incluí um grande número de símbolos gráficos, tipográficos, matemáticos e científicos, como aqueles fornecidos pelo Tex, PostScript, APL, MS-DOS, MS-Windows, Macintosh, fontes OCR, e muitos sistemas de processamento de texto e de publicação, e mais será adicionado. O padrão UCS (ISO 10646) descreve uma arquitetura de conjunto de caracteres de 31 bits, consistindo de 128 conjuntos, de 24 bits divididos em 256 planos de 16 bits que formam 256 linhas com 8 bits com 256 colunas , uma para cada caractere. A parte 1 do padrão (ISO 10646-1) define que as primeiras 65534 posições de código (0x0000 to 0xfffd), formam o Plano Multilingual Básico (Basic Multilingual Plane - BMP), que é o plano 0 no grupo 0. A parte 2 do padrão (ISO 10646-2) adiciona caracteres para o grupo 0 que estão fora do BMP nos vários planos suplementares no intervalo 0x10000 até 0x10ffff. Não há planos para se adicionar caracteres depois de 0x10ffff no padrão, então de todo espaço de código, somente uma pequena fração do grupo 0 será sempre usada em um futuro previsto. O BMP contém todos os caracteres encontrado em outros conjuntos usados normalmente. Os planos suplementares adicionados pela ISO 10464-2 cobre somente caracteres muito exóticos de necessidades especiais científicas, impressão de dicionários, industria de publicações, protocolo de alto-nível e entusiastas.

A representação de cada caractere UCS como uma palavra de 2 bytes é referida pela forma UCS-2 (somente para caracteres BMP), enquanto que UCS-4 é a representação de cada caractere por uma palavra de 4 bytes. Adicionalmente, existem duas formas de codificação UTF-8 para tratamento de compatibilidade retrógrada com processamento ASCII e UTF-16 para tratamento de compatibilidade retrógrada com caracteres não-BMP para 0x10ffff para UCS-2.

Os caracteres UCS 0x0000 até 0x007f são idênticos ao clássico conjunto de caracteres US-ASCII e no intervalo de 0x000 até 0x00ff são idênticos ao ISO 8859-1 Latin-1.

COMBINANDO CARACTERES
Alguns pontos de código no UCS têm sido atribuídos aos caracteres combinantes. Estes são similares às chaves de acento de não-espaçamento em uma máquina de escrever. Um caractere combinante apenas acrescenta um acento a um caractere anterior. Os caracteres acentuados mais importantes têm seus próprios códigos no UCS, porém o mecanismo de caracteres combinantes permitem acrescentar acentos e outras marcas diacríticas a qualquer caractere. Os caracteres combinantes sempre seguem o caractere que eles modificam. Por exemplo, o caractere alemão Umlaut-A ("letra A maiúscula com trema") pode ser representado pelo código UCS pré-composto 0x00c4, ou alternativamente como a combinação de uma "letra A maiúscula" normal seguida de um "trema combinante": 0x0041 0x0308.

Caracteres combinantes são essencialmente para codificar a escrita thai ou tipográfia matemática e usuários do Alfabeto Fonético Internacional.

NÍVEIS DE IMPLEMENTAÇÃO
Como nem todo sistema suporta mecanismos avançados, como caracteres combinantes, a ISO 10646 especifica os três seguintes níveis de implementação da UCS:

Nível 1
    Caracteres combinantes e caracteres Hangul Jamo (uma codificação especial e mais complicada da escrita coreana, onde as sílabas Hangul são codificadas como dois ou três subcaracteres) não são implementados.

Nível 2
    Como o nível 1, alguns caracteres combinantes são permitidos para algumas linguas, onde são essenciais, (por exemplo, thai, lao, hebraico, árabe, devangari, malaio, etc.).

Nível 3
    Todos os caracteres UCS são suportados.

O padrão Unicode 3.0 publicado pelo Unicode Consortium contém exatamente o Plano Multilingual Básico da UCS no nível 3 de implementação, como descrito na ISO 10646:2000. Unicode 3.1 acrescenta os planos suplementares da ISO 10646-2. O padrão unicode e relatórios técnicos publicados pelo 'Unicode Consortium' dispõe mais informações adicionais da semântica e utilização recomendada dos vários caracteres. Ele provêem guias e algorítmos para edição, ordenamento, comparação, normalizalção, conversão e exibição de cadeia de caracteres unicode.

UNICODE SOB LINUX
Sob o GNU/Linux, o tipo C wchar_t é um tipo inteiro, com sinal, de 32 bits. Estes valores são sempre interpretados pela biblioteca C como código UCS (em todas as localizações), uma convenção que é assinalada pela biblioteca GNU C para aplicações pela definição da constante __STDC_ISO_10646__ como especificado no padrão C 99. UCS/Unicode pode ser usado como ASCII nos fluxos de entrada/saída, comunicação de terminais, arquivos de texto plano, nomes de arquivos, e variáveis de ambiente na codificação multibyte UTF-8, compatível ASCII. Para sinalizar o uso do UTF-8 como codificação caractere para todas aplicações, uma adequada localização deve ser selecionada pela variáveis de ambiente (por exemplo, "LANG=en_GB.UTF-8").

A função nl_langinfo(CODESET) devolve o nome da codificação selecionada. Bibliotecas de funções como wctomb(3) e mbsrtowcs(3) podem ser usadas para transformar internamente caracteres wchar_t e cadeias de caracteres em codificações de caracteres internas do sistema e vice-versa e wcwidth(3), como muitas posições (0–2) o cursor avança pela saída do caractere.

Sob o GNU/Linux,no geral, somente o nível de implementação 1 do BMP deve ser usado no momento. Mais que duas combinações de caracteres por base de caractere para certas escritas (em particular o thai) são também suportados por alguns emuladores de terminal UTF-8 e fontes ISO 10646 (nível 2), mas em geral caracteres pré-compostos deveriam ser preferidos quando disponível (Unicode chama esta de Normalization Form C).

ÁREA PRIVADA
Na BMP, a faixa de 0xe000 a 0xf8ff nunca será atribuída a qualquer caractere pelo padrão, e é reservada para uso privativo. Para a comunidade Linux, esta área privativa foi dividida nas faixas: x0e000 até 0xefff que pode ser usada individualmente por algum usuário final; e a zona Linux da faixa de 0xf000 até 0xf8ff onde as extensões são coordenadas entre todos os usuários Linux. O registro dos caracteres atribuídos à zona Linux é mantido atualmente por H. Peter Anvin <Peter.Anvin@linux.org>.

LITERATURA

*   Tecnologia da informação - Conjunto Universal de Caracteres Codificados em Múltiplos Octetos (UCS) - Parte 1: Arquitetura e Plano Multilingual Básico. Padrão Internacional ISO 10646-1, Organização Internacional para Padronização, Genebra, 1993. Esta é a especificação oficial do UCS. Disponível como arquivo PDF em cdrom a partir de http://www.iso.ch/.

*   O Padrão Unicode - Codificação Mundial de Caracteres Versão 3.0. O Consórcio Unicode, Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.

*   S. Harbison, G. Steele. C - Um Manual de Referência. Quarta edição, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3. Um bom livro de referência sobre a linguagem de programação C. A quarta edição agora cobre também a Emenda de 1994 para o padrão ISO do C 90, que acrescenta um grande número de novas funções da biblioteca C para manipulação de conjuntos de caracteres largos e multi-bytes, mas ele não cobre a ISO C 99, que aprimora o suporte a caracteres largos e multi-bytes.

*   Relatórios técnicos Unicode.
    http://www.unicode.org/unicode/reports/

*   Markus Kuhn: UTF-8 e Unicode FAQ para Unix/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html Fornece informação de subscrição para a lista de discussão linux-utf8, a qual é um ótimo local para procurar por avisos sobre a utilização do Unicode no Linux.

*   Bruno Haible: Unicode HOWTO.
    ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO.html

PROBLEMAS
Quando esta página de manual foi revisada, o suporte da biblioteca GNU C para as localizações UTF-8 está maduro e o XFree86 suporta em um estado avançado, mas trabalho em fazer as aplicações (mais notadamente editores) adequadas para uso com as localizações UTF-8 está progredindo. Atualmente UCS suporta, no linux, usualmente fornecido por caracteres de duplo-tamanho CJK e alguns tipos simples de combinação de caracteres de sobreposição, mas usualmente não incluem suporte para escritas feitas da direita para a esquerda ou requerimentos de ligamento de substituição como no hebráico, arábe, ou escritas índicas. Estas escritas são atualmente suportadas, somente, em certas aplicações gráficas (visualizadores HTML, processadores de texto) com sofisticados mecanismos de desenho de texto.

AUTOR
Markus Kuhn <mgk25@cl.cam.ac.uk>

VEJA TAMBÉM
utf-8(7), charsets(7), setlocale(3).

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

  Tradução:
Rubens de Jesus Nogueira <darkseid99@usa.net>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>