Páginas de código
A maioria dos aplicativos escritos hoje lida com dados de caracteres principalmente como Unicode, usando a codificação UTF-16. No entanto, muitos aplicativos herdados continuam a usar conjuntos de caracteres com base em páginas de código. Até mesmo novos aplicativos às vezes precisam trabalhar com páginas de código, geralmente por um dos seguintes motivos:
- Para se comunicar com aplicativos herdados.
- Para se comunicar com servidores de email e notícias mais antigos, que podem nem sempre dar suporte a Unicode.
- Para se comunicar com o Console do Windows para fins herdados. (O console dá suporte ao Unicode, mas algumas ferramentas de aplicativo de linha de comando herdadas podem não.)
Observação
Novos aplicativos do Windows devem usar Unicode para evitar inconsistências de páginas de código variadas e para facilitar a localização.
Cada página de código é representada por um identificador de página de código, por exemplo, 1252, e é tratada pelas funções de API Unicode e conjunto de caracteres. Para obter uma lista de identificadores de página de código com suporte, consulte Identificadores de página de código. A referência "Páginas de Código" no Centro de Desenvolvedores Global do Microsoft Go fornece descrições completas de muitas páginas de código.
Páginas de código do Windows, comumente chamadas de "páginas de código ANSI", são páginas de código para as quais valores não ASCII (valores maiores que 127) representam caracteres internacionais. Essas páginas de código são usadas nativamente no Windows Me e também estão disponíveis em Windows NT e posteriores.
Observação
Originalmente, a página de código do Windows 1252, a página de código comumente usada para inglês e outros idiomas da Europa Ocidental, era baseada em um rascunho do ANSI (American National Standards Institute). Esse rascunho acabou se tornando ISO 8859-1, mas a página de código do Windows 1252 foi implementada antes do padrão se tornar final, e não é exatamente o mesmo que ISO 8859-1.
Muitas funções da API do Windows têm versões "A" (ANSI) e "W" (wide, Unicode). A versão "A" manipula o texto com base nas páginas de código do Windows, enquanto a versão "W" manipula o texto Unicode. Consulte Tipos de dados do Windows para cadeias de caracteres e convenções para protótipos de função.
Às vezes, as páginas de código do Windows também são chamadas de "páginas de código ativas" ou "páginas de código ativas do sistema". Um sistema operacional Windows sempre tem uma página de código do Windows ativa no momento. Todas as versões ANSI das funções de API usam a página de código ativa no momento.
As páginas de código OEM (fabricante do equipamento original) são páginas de código para as quais valores não ASCII representam caracteres de desenho de linha e pontuação. Essas páginas de código foram originalmente usadas para MS-DOS e ainda são usadas para aplicativos de console. Eles também são usados para os nomes de arquivo não estendidos nos sistemas de arquivos FAT12, FAT16 e FAT32, conforme descrito em Conjuntos de Caracteres Usados em Nomes de Arquivo. A página de código OEM usual para inglês é a página de código 437.
Para páginas de código do Windows e páginas de código OEM, os valores de código 0x00 até 0x7F correspondem ao conjunto de caracteres ASCII de 7 bits. Os valores de código 0x00 por meio de 0x19 e 0x7F sempre representam caracteres de controle padronizados e 0x20 por meio de 0x7E representam caracteres exibicionáveis padronizados. Os caracteres representados pelos códigos restantes, 0x80 até 0xff, variam entre conjuntos de caracteres. Cada conjunto de caracteres inclui caracteres especiais diferentes, normalmente personalizados para um idioma ou grupo de idiomas. A página de código do Windows 1252 e a página de código OEM 437 geralmente são usadas no Estados Unidos.
Além das páginas de código do Windows e do OEM, seus aplicativos podem usar páginas de código não nativas. Exemplos são páginas de código EBCDIC e Macintosh.
Duas codificações de Unicode (UTF-7 e UTF-8) são implementadas como páginas de código. Como outras páginas de código, cada página é conhecida por um identificador numérico e pode ser tratada com muitas das mesmas funções de API unicode e conjunto de caracteres.
As páginas de código podem ser páginas SBCS ( conjunto de caracteres de byte único ) ou páginas DBCS ( conjunto de caracteres de byte duplo ). Em páginas SBCS, cada byte codifica diretamente um único caractere, para que seja possível representar exatamente 256 caracteres distintos (incluindo caracteres de controle, letras, dígitos, pontuação, símbolos e similares). As páginas de código DBCS são usadas para idiomas como japonês e chinês. Nessa página de código, alguns caracteres têm codificações de dois bytes com determinados valores de bytes (sempre valores maiores que 127) que servem como "bytes potenciais". Em vez de codificar caracteres por conta própria, os bytes potenciais podem ser mapeados para um caractere apenas em conjunto com um "byte de trilha".
Alguns protocolos herdados exigem o uso de páginas de código SBCS e DBCS. Cada página de código SBCS/DBCS dá suporte a caracteres diferentes, mas nenhuma página de código dá suporte à amplitude completa de caracteres fornecida pelo Unicode. Cada página de código SBCS/DBCS dá suporte a um subconjunto diferente, codificado de forma diferente.
Observação
Os dados convertidos de uma página de código SBCS ou DBCS para outra estão sujeitos a corrupção, pois o mesmo valor de dados em páginas de código diferentes pode codificar um caractere diferente. Os dados convertidos de Unicode em SBCS ou DBCS estão sujeitos à perda de dados, pois uma determinada página de código pode não ser capaz de representar todos os caracteres usados nesses dados Unicode específicos.
Além das páginas de código SBCS e DBCS, seus aplicativos têm disponível as páginas de código do conjunto de caracteres multibyte 52936, 54936, 51949 e 5022x, que usam uma abordagem semelhante à de um DBCS. No entanto, uma página de código de conjunto de caracteres multibyte vai além das codificações de dois bytes de alguns caracteres. UTF-7 e UTF-8 usam uma abordagem semelhante para codificar Unicode com base em bytes de 7 e 8 bits, respectivamente. Para obter mais informações, consulte Unicode.
Várias funções Unicode e conjunto de caracteres permitem que seus aplicativos manipulem páginas de código. Um aplicativo pode usar as funções GetCPInfo e GetCPInfoEx para obter informações sobre uma página de código. Essas informações incluem o caractere padrão usado quando um caractere em uma cadeia de caracteres convertida não tem nenhuma entrada correspondente na página de código.
Um aplicativo pode usar as funções MultiByteToWideChar e WideCharToMultiByte para converter entre cadeias de caracteres com base em páginas de código do Windows e cadeias de caracteres Unicode. Embora seus nomes se refiram a "MultiByte", essas funções funcionam igualmente bem com páginas de código de conjunto de caracteres SBCS, DBCS e multibyte.
Observação
WideCharToMultiByte poderá perder alguns dados se a página de código fornecida não puder representar todos os caracteres em uma cadeia de caracteres Unicode.
Seu aplicativo pode converter entre páginas de código do Windows e páginas de código OEM usando as funções padrão da biblioteca de runtime C. No entanto, o uso dessas funções apresenta um risco de perda de dados porque os caracteres que podem ser representados por cada página de código não correspondem exatamente.
Seus aplicativos também podem chamar a função GetACP . Essa função recupera o identificador da página de código do Windows (ANSI) atual.