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 encontradas na última edição do The Unicode Standard , e do website do Unicode Consortium em www.unicode.org.
O Unicode utiliza dois formulários de codificação: 8-bit e 16-bit, com base no tipo de dados dos dados que estão sendo codificados. A forma de codificação padrão é 16-bit, ou seja, cada caractere é de 16 bits (dois bytes) de largura, e geralmente é mostrado como U + hhhh, onde hhhh é o ponto de código hexadecimal do caractere. Enquanto os resultando em mais de 65000 elementos de código são suficientes 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 tantos quanto mais um milhão de caracteres. O mecanismo de extensão utiliza um par de caracteres de alto e baixo substitutos para codiir um caractere estendido ou suplementar. O primeiro (ou alto) caractere de aluguel tem um valor de código entre U+D800 e U + DBFF, e o segundo (ou baixo) caractere de sub-rogate tem um valor de código entre U+DC00 e U + DFFF.
UCS-2
A International Organization for Standardization (ISO) e a International Electrotechnical Commission (IEC) padrão 10646 (ISO/IEC 10646) especifica o Universal Multiple-Octet Codificados Character Set (UCS) que possui uma versão 16-bit (de dois bytes) (UCS-2) e uma versão 32-bit (quatro bytes) (UCS-4). UCS-2 é idêntico ao formulário Unicode 16-bit sem substitutos. UCS-2 pode coditer todos os caracteres (16-bit) definidos no repertório Unicode version 3.0. Dois caracteres UCS-2 -um alto seguido por um sub-rogado baixo-são necessários para codiir cada um dos novos caracteres complementares introduzidos a partir do Unicode version 3.1. Estes caracteres suplementares são definidos fora do Plano Básico Multilíngue Básico 16-bit (BMP ou Plane 0).
UTF-16
A ISO/IEC 10646 também define uma técnica de extensão para codificação de alguns caracteres UCS-4 usando dois caracteres UCS-2 . Esta extensão, chamada UTF-16, é idêntica à forma de codificação Unicode 16-bit com substitutos. Em resumo, o repertório de caracteres UTF-16 consiste em todos os caracteres UCS-2 mais os adicionais de um milhão de caracteres acessíveis através dos pares de substitutos.
Ao serializar 16-bit caracteres Unicode em bytes, 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 pouco endian). A ordenação de bytes padrão para Unicode é big-endian.
UTF-8
Dezesseis caracteres Unicode de bit representam um grande problema para aplicações baseadas em ASCII e sistemas de arquivos baseados em ASCII. Por exemplo, os aplicativos cientes não-Unicode podem interpretar mal os 8 bits zero iniciais do caractere de maiússola 'A' (U+0041) como o caractere NULL ASCII de byte único.
UTF-8 (UCS Transformation Format 8) é uma transformação algorítmica que transforma caracteres Unicode de comprimento fixo em strings de bytes de comprimento variável ASCII. Em UTF-8, caracteres ASCII e de controle são representados por seus códigos de byte único usuais, e outros caracteres tornam-se dois ou mais bytes de comprimento. UTF-8 pode codiver ambos caracteres não complementares e complementares.
UTF-8 caracteres podem ter alta de 4 bytes de comprimento. Caracteres não complementares são de até 3 bytes caracteres longos e complementares têm 4 bytes de comprimento.
O número de bytes para cada caractere UTF-16 em formato UTF-8 pode ser determinado a partir de Tabela 1.
| Valor Código (binário) |
UTF-16 (binário) |
1st byte (binário) |
2nd byte (binário) |
3rd byte (binário) |
4th byte (binário) |
|---|---|---|---|---|---|
| 00000000 0xxxxxxx |
00000000 0xxxxxxx |
0xxxxxxx | |||
| 00000yyy yyxxxxxx |
00000yyy yyxxxxxx |
110yyyyy | 10xxxxxx | ||
| zzzzyyyy yyxxxxxx |
zzzzyyyy yyxxxxxx |
1110zzzz | 10yyyyyy | 10xxxxxx | |
| uuuuu zzzzyyyy yyxxxxxx |
110110ww wwzzzzyy 110111yy yyxxxxxx |
11110uuu (onde 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 de bits do personagem. Por exemplo, U+0080 se transforma em 11000010 10000000 em formato binário, e o par de caracteres substituta U+D800 U+DC00 torna-se 11110000 10010000 10000000 10000000 em formato binário.