Codificação de caracteres Unicode

O padrão de codificação de caracteres Unicode é um esquema de codificação de caracteres de comprimento fixo que inclui caracteres de quase todas as línguas vivas do mundo.

As informações sobre Unicode podem ser localizadas em O Padrão Unicodee no website do Consórcio Unicode em www.unicode.org

Unicode usa dois formulários de codificação: 8 bits e 16 bits, com base no tipo de dados dos dados que estão sendo codificados. O formato de codificação padrão é 16 bits, em que cada caractere tem 16 bits (2 bytes) de largura. A forma de codificação de dezesseis bits é geralmente mostrada como U + hhhh, em que hhhh é o ponto de código hexadecimal do caractere. Esta forma de codificação produz mais de 65 000 elementos de código, o que é suficiente para codificar a maioria dos caracteres das principais línguas do mundo. O padrão Unicode também fornece um mecanismo de extensão que permite a codificação de até 1.000.000 caracteres extras. O mecanismo de extensão usa um par de caracteres substitutos alto e baixo para codificar um caractere estendido ou complementar... O primeiro (ou alto) caractere substituto tem um valor de código entre U+D800 e U + DBFF. O segundo caractere substituto (ou baixo) possui um valor de código entre U+DC00 e U + DFFF.

UCS-2

A Organização Internacional para Padronização (ISO) e o padrão 10646 da Comissão Eletrotécnica Internacional (IEC) (ISO/IEC 10646) especificam o Conjunto de Caracteres Codificados (UCS) Universal Multiple-Octet. Esse conjunto de caracteres possui uma versão de 16 bits (dois bytes) (UCS-2) e uma versão de 32 bits (quatro bytes) (UCS-4)... O UCS-2 é idêntico ao formulário Unicode de 16 bits sem substitutos UCS-2 pode codificar todos os caracteres (16 bits) definidos no repertório do Unicode versão 3.0 . Dois caracteres UCS-2 -um alto seguido por um baixo substituto-são necessários para codificar cada um dos novos caracteres complementares, começando na versão Unicode 3.1. Esses caracteres complementares são definidos fora do Basic Multilingual Plane original de 16 bits (BMP ou Plano 0).

UTF-16

O ISO/IEC 10646 também define uma técnica de extensão para codificar alguns caracteres UCS-4 usando dois caracteres UCS-2 . Essa extensão, chamada UTF-16, é idêntica ao formulário de codificação Unicode de 16 bits com substitutos Em resumo, o repertório de caracteres UTF-16 consiste em todos os caracteres UCS-2 mais os 1.000.000 adicionais que são acessíveis por meio dos pares substitutos.

Ao serializar caracteres Unicode de 16 bits em bytes, a ordem em que os bytes aparecem depende do processador que está sendo utilizado.. Alguns processadores colocam o byte mais significativo na posição inicial (conhecido como ordem big-endian), enquanto outros colocam o byte menos significativo primeiro (conhecido como ordem little-endian). A ordem de bytes padrão para Unicode é big endian.

UTF-8

Os caracteres Unicode de dezesseis bits representam um grande problema para aplicativos e sistemas de arquivos baseados em ASCII orientados por bytes Por exemplo, aplicativos cientes não Unicode podem interpretar incorretamente os 8 bits zero iniciais do caractere maiúsculo 'A' (U+0041) como o caractere ASCII NULL de byte único.

UTF-8 (UCS Transformation Format 8) é uma transformação algorítmica que transforma caracteres Unicode de comprimento fixo em sequências de bytes ASCII de comprimento variável. Em UTF-8, caracteres ASCII e de controle são representados por seus códigos de byte único usuais e outros caracteres se tornam dois ou mais bytes de comprimento. UTF-8 pode codificar caracteres não complementares e complementares.

UTF-8 caracteres podem ter até 4 bytes de comprimento. Caracteres não complementares têm até 3 bytes de comprimento e caracteres complementares têm 4 bytes de comprimento.

O número de bytes para cada caractere UTF-16 no formato UTF-8 pode ser determinado a partir da Tabela 1.

Tabela 1. UTF-8 Distribuição de Bit
Valor Código

(binário)

UTF-16

(binário)

Primeiro byte

(binário)

Segundo byte

(binário)

Terceiro byte

(binário)

Quarto byte

(binário)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

yyxxxxxx

00000yyy

yyxxxxxx

110yyyyy 10xxxxxx    
zzzzyyyy

yyxxxxxx

zzzzyyyy

yyxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuuu

zzzzyyyy

yyxxxxxx

110110ww

wwzzyy

110111yy

yyxxxxxx

11110uuu

(em que uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

Em cada um dos valores de código listados na tabela anterior, a série de u's, w's, x's, y's e z's é a representação bit do caractere. Por exemplo, U+0080 se transforma em 11000010 10000000 em formato binário e o par de caracteres substituto U+D800 U+DC00 se torna 11110000 10010000 10000000 10000000 em formato binário.