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.
| 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.