- O Unicode atribui um ponto de código exclusivo a cada caractere e sincroniza seu repertório com a ISO/IEC 10646.
- UTF-8, UTF-16 e UTF-32 codificam os mesmos caracteres e permitem conversão sem perdas.
- Propriedades de normalização, Bidi e UCD garantem comparação, ordenação e renderização consistentes.
- Adotar o Unicode (de preferência UTF-8 na web) evita a corrupção e facilita a internacionalização.
Unicode é a linguagem comum que os computadores usam para lidar com texto : ele atribui um número único a cada caractere e símbolo, de praticamente qualquer sistema de escrita, para que possa ser armazenado, processado e compartilhado perfeitamente entre plataformas e países.
Este padrão surgiu para superar as limitações dos antigos conjuntos de caracteres ( o conjunto ASCII , páginas de código, EBCDIC, etc.), que eram insuficientes ou incompatíveis entre si, e hoje está sincronizado com a ISO/IEC 10646, mantém algoritmos (como o bidirecional) e define propriedades e regras de normalização para que tudo funcione de forma consistente.
O que é Unicode e por que ele é tão importante?
O Unicode é um padrão de codificação de caracteres universal e em constante evolução que descreve cada caractere com um nome, um ponto de código e um conjunto de propriedades (escrita, categoria, direcionalidade, maiúsculas/minúsculas, etc.). O Comitê Técnico do Unicode (UTC), dentro do Consórcio Unicode, mantém-no sincronizado com o padrão ISO/IEC 10646.
Seu objetivo é a universalidade, a uniformidade e a singularidade : um amplo repertório que permite a troca inequívoca de textos multilíngues, com regras claras e reproduzíveis. Graças a isso, as tecnologias modernas (sistemas operacionais, navegadores, XML, Java, bancos de dados) podem misturar alfabetos latinos e árabes, ideogramas CJK, emojis e símbolos técnicos ou musicais em um mesmo documento.
Caracteres, glifos e pontos de código
Em Unicode, um caractere é uma unidade abstrata de informação, e um ponto de código é seu identificador numérico . Um glifo é a forma visual (o que você vê na tela), que depende da fonte . Um único caractere pode ter vários glifos e, às vezes, um glifo representa mais de um caractere.
A notação usual para um ponto de código é U+XXXX em hexadecimal . Exemplos ilustrativos do material analisado: a letra minúscula 'l' é U+006C, a letra minúscula pré-composta 'ü' é U+00FC, o 'é' é U+00E9 e o beta grego: a letra maiúscula é U+0392 e a minúscula U+03B2 (em alguns textos, 'β' é citado com U+0392, mas esse código corresponde à letra maiúscula 'Β').
O espaço de código Unicode possui 1.114.112 posições possíveis (até U+10FFFF) , organizadas para abranger e classificar todos os sistemas de escrita e símbolos, com dezenas de milhares de atribuições efetivas e em constante crescimento em cada versão.
Plantas, áreas e blocos
O Unicode divide seu espaço de caracteres em 17 planos de até 65.536 pontos de código cada . Essa organização facilita o agrupamento de scripts e símbolos relacionados e permite encontrar rapidamente o que você procura.
Os planos mais relevantes são: o Plano Multilíngue Básico (BMP, plano 0), que reúne quase todos os alfabetos modernos e muitos símbolos; o Plano Multilíngue Suplementar (SMP, plano 1), que armazena escritas históricas e símbolos técnicos (por exemplo, musicais e matemáticos); o Plano Ideográfico Suplementar (SIP, plano 2), que expande os ideogramas CJK; o plano 14 (SSP), que inclui rótulos especiais; e os planos 15 e 16, que são para uso privado.
Blocos e áreas : os mapas são subdivididos informalmente em áreas e formalmente em blocos contíguos. Os blocos são usados para tabular e documentar caracteres, embora nem sempre correspondam a agrupamentos linguísticos significativos.
Ideogramas CJK e o projeto Unihan
Os ideogramas do Leste Asiático (Han) são unificados no Unicode, com variações estilísticas por região , mas todos se referem ao mesmo caractere abstrato. Sua gestão é feita pelo Grupo de Relatores Ideográficos (IRG), um grupo ISO/IEC JTC1/SC2/WG2 com representantes da China, Japão, Coreia, Vietnã, Hong Kong, Macau, Singapura, Estados Unidos e outros.
A base de dados Unihan reúne informações auxiliares (leituras, significados, equivalências) essenciais para lidar com esses ideogramas em diferentes idiomas e padrões históricos ou corporativos.
Principais blocos e extensões CJK :
- Ideogramas unificados CJK (BMP, U+4E00–U+9FFF): 20.992 caracteres comumente usados.
- Extensão A (BMP, U+3400–U+4DBF): 6.592 ideogramas menos frequentes.
- Extensões B–H: em SMP/SIP/TIP, eles somam dezenas de milhares a mais (B: U+20000–U+2A6DF, 42.720; C: U+2A700–U+2B73F, 4.154; D: U+2B740–U+2B81F, 222; E: U+2B820–U+2CEAF, 5.762; F: U+2CEB0–U+2EBEF, 7.473; G: U+30000–U+3134F, 4.939;
- Outros blocos CJK relacionados: Radicais Kangxi (U+2F00–U+2FDF), símbolos e pontuação CJK (U+3000–U+303F), compatibilidade e formatos de compatibilidade, suplemento de ideograma de compatibilidade, etc.
O Unicode prevê que a incorporação de ideogramas não terá um fim absoluto e contempla mecanismos como sequências de descrição ideográfica para representar símbolos não codificados, decompondo-os em componentes existentes (com ressalvas: sem decomposição canônica ou garantias em operações como busca ou ordenação).
Formas de codificação: UTF-8, UTF-16 e UTF-32
O Unicode define formas de transformação (UTF) que convertem pontos de código em unidades de armazenamento, permitindo que o software processe o texto de forma eficiente, de acordo com seu contexto.
UTF-8 é um formato de codificação orientado a bytes de comprimento variável, compatível com ASCII no intervalo de U+0000 a U+007F em um único byte. O padrão atual usa de 1 a 4 bytes por caractere; alguns textos mais antigos mencionam de 1 a 6, mas no Unicode moderno o valor é de 1 a 4. É o formato dominante na web.
UTF-16 usa unidades de 16 bits
(uma ou duas unidades de código por caractere) : a maioria dos caracteres BMP cabe em uma unidade; caracteres suplementares usam pares substitutos no intervalo U+D800–U+DFFF.
UTF-32 tem comprimento fixo: 4 bytes por caractere, simples, mas consome muito espaço; útil quando a indexação direta de caracteres é importante e a memória não é um problema.
Como os bits são distribuídos em UTF-8
O formato UTF-8 distribui os bits do ponto de código em sequências de 1 a 4 bytes com cabeçalhos reconhecíveis, o que evita ambiguidades e facilita a detecção dos limites dos caracteres.
| Intervalo Unicode | Padrão de bits | Bytes |
|---|---|---|
| U+0000..U+007F | 0xxxxxxx | 1 |
| U+0080..U+07FF | 110aaaa 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10aaaa 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx | 4 |
Uma das principais vantagens do UTF-8 é que ele evita problemas de ordem de bytes (endianness) e permite o processamento altamente eficiente de fluxos de texto, além de ser compatível com versões anteriores do ASCII.
Esquemas de codificação, endianness e BOM
Além dos formatos UTF, o Unicode descreve esquemas de serialização que resolvem como os bytes são transmitidos entre sistemas com diferentes endianness e como aspectos como a ordem dos bytes são sinalizados.
- UTF-8: endianness não se aplica. Pode ser transportado Marca de ordem de bytes (BOM) como uma dica, embora não seja obrigatório ou recomendado por padrão.
- UTF-16: Variantes BE/LE (big/little-endian) e BOM opcional (se ausente e não definido pelo protocolo, big-endian é assumido).
- UTF-32: Variantes BE/LE com regras análogas; BOM permitida como marca de ordem.
Existem também variantes específicas como UTF-16BE/UTF-16LE e UTF-32BE/UTF-32LE (sem BOM por convenção), e outras codificações de compatibilidade históricas como UTF-7 ou UTF-EBCDIC, além de GB18030 (equivalente chinês ao UTF-8 com suporte para chinês simplificado e tradicional).
Normalização, composição e equivalências
Muitos caracteres podem ser representados como pré-compostos ou como sequências de base + sinais combinatórios . Exemplos clássicos do material revisado: o 'Ä' pré-composto é U+00C4, enquanto a forma decomposta é 'A' (U+0041) + diérese (U+0308). O 'ỗ' vietnamita pode ser representado como 'o' (U+006F) + acento circunflexo (U+0302) + til (U+0303).
O Unicode define formas padronizadas e dois tipos de equivalência : canônica (mesmo conteúdo essencial) e de compatibilidade (formas que podem parecer iguais, mas têm diferenças semânticas). A padronização garante uma comparação confiável de strings e reduz a duplicação.
Algoritmo bidirecional e caracteres especiais
Para escritas da direita para a esquerda, como o árabe ou o hebraico, o Unicode incorpora um algoritmo bidirecional padronizado e em constante evolução (Bidi) (por exemplo, revisões na versão 6.3), de modo que textos mistos com latim e árabe sejam representados na ordem visual correta.
Classes de pontos de código que devem ser conhecidas de acordo com o material recebido: caracteres gráficos (letras, sinais, símbolos), formatação (caracteres invisíveis que afetam o processamento: U+2028 quebra de linha, U+2029 quebra de parágrafo, U+00A0 espaço físico), códigos de controle herdados para compatibilidade (intervalos U+0000–U+001F, U+007F, U+0080–U+009F), uso privado, posições reservadas, substitutos (U+D800–U+DFFF para UTF-16) e não caracteres (U+FFFE, U+FFFF em cada plano).
Unicode, ISO/IEC 10646 e outros padrões (ASCII, ANSI, páginas de código)
O Unicode está sincronizado com a norma ISO/IEC 10646 (UCS) e mantém os mapeamentos para padrões anteriores (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643, etc.), além de reservar espaços para uso exclusivo dos fabricantes.
ASCII vs. Unicode : ASCII é um conjunto de caracteres de 7 bits com 128 caracteres , suficiente para o inglês básico, mas insuficiente para idiomas com diacríticos, ideogramas ou emojis . O Unicode abrange mais de 140.000 caracteres e continua a crescer, com codificação de 8/16/32 bits de acordo com o formato UTF-12.
ANSI e páginas de código : 'ANSI' geralmente se refere a páginas de código Windows de 8 bits limitadas e mutuamente incompatíveis. Um computador executando OEM-Latin II que abre um texto em IBM EBCDIC-Cyrillic verá caracteres incorretos. O Unicode supera esse problema com um conjunto único de caracteres e conversões sem perda entre seus próprios formatos.
Implementação em sistemas (Windows, Solaris) e conversão
O Windows usa internamente UTF-16 para suas APIs modernas e oferece recursos como MultiByteToWideChar e WideCharToMultiByte para conversão entre Unicode e páginas de código (SBCS/DBCS/MBCS). Se você for obrigado a converter para uma página de código, poderá haver perda de dados caso ela não consiga representar todos os caracteres.
Novos aplicativos no Windows devem usar UTF-16 internamente e deixar a conversão para as etapas finais (entrada/saída, protocolos), minimizando a corrupção. Mesmo assim, o Windows mantém a compatibilidade com páginas de código quando inevitável.
De acordo com a documentação revisada, o Oracle Solaris 11 oferece suporte a Unicode 6.0 e ISO/IEC 10646:2011 em nível de sistema, usando UTF-8 como formato padrão em seus conjuntos de parâmetros, o que evita problemas de ordenação de bytes e preserva o ASCII de forma transparente.
Unicode na prática: Web, documentos e programação
Na web, é comum servir e armazenar conteúdo em UTF-8 . Em HTML, declare '<meta charset="UTF-8">' para garantir a compatibilidade e use entidades numéricas hexadecimais quando necessário (exemplo: o euro '€').
No Word, você pode inserir símbolos Unicode facilmente posicionando o cursor, acessando Inserir > Símbolo ou digitando o código e pressionando Alt+X; isso converte o valor em seu caractere, seguindo os procedimentos padrão. Veja também a lista de códigos Alt para inserir símbolos pelo teclado.
Em linguagens de programação : em Python 3, as strings já são Unicode; em Java e C#, você pode usar caracteres de escape '\uXXXX'; em HTML, '&#xXXXX;'. O importante é que a edição, a compilação e a transmissão usem a mesma codificação para evitar erros.
Copiar e colar símbolos funciona se toda a sequência estiver em Unicode . Se partes dela usarem uma codificação diferente, pontos de interrogação, quadrados ou outros símbolos estranhos podem aparecer.
Banco de dados de personagens (UCD), propriedades e categorias
O Banco de Dados de Caracteres Unicode (UCD) publica, para cada ponto de código, seu nome, categoria, script, propriedades de maiúsculas e minúsculas, direcionalidade e outras características . Essas informações são vitais para que os mecanismos de renderização e o processamento de texto funcionem corretamente.
Graças a essas propriedades , diferentes componentes e algoritmos (como classificação, segmentação de palavras ou transformação de maiúsculas/minúsculas) podem se comportar de maneira consistente com os mesmos dados.
Versões e extensões da norma: destaques
O Unicode evolui a cada versão , incorporando novos alfabetos, símbolos e emojis. Marcos importantes incluem a versão 1.0, em 1991, com 7.161 caracteres, e expansões subsequentes que adicionaram milhares de novos símbolos, ideogramas, emojis e alfabetos.
Por exemplo, em 2022 , a versão 15.0 adicionou 4.192 ideogramas CJK adicionais e outros elementos, atingindo aproximadamente 149.186 caracteres.
Ferramentas para explorar a tabela Unicode
Existem ferramentas gratuitas para pesquisar e analisar caracteres : Unibook Character Browser, SYMBL e Branah.com permitem consultar propriedades, nomes e blocos de caracteres, facilitando para desenvolvedores e criadores de conteúdo encontrarem rapidamente as informações de que precisam.
Casos de uso: formulários de endereço, internacionalização e negócios
Permitir que os usuários insiram endereços em seu próprio idioma e alfabeto ajuda a reduzir erros e a melhorar a experiência do usuário. Além disso, a interoperabilidade do Unicode evita problemas de conversão entre diferentes sistemas, mantendo a integridade do texto em toda a cadeia digital.
Por essa razão, o Unicode é o elemento fundamental que garante que o texto permaneça final em toda a infraestrutura digital , desde formulários da web a sistemas de banco de dados e documentos impressos, independentemente de você usar 'ñ', árabe, chinês ou emojis na mesma frase.