Compartilhar via


Suporte para Unicode

Unicode é uma especificação de suporte para todos os conjuntos de caracteres, inclusive os que não podem ser representados em um único byte. Se você estiver programando para um mercado internacional, recomendamos usar o Unicode ou um MBCS (conjunto de caracteres multibyte). Ou codifique seu programa de forma que seja possível compilá-lo alterando um switch.

Um caractere largo é um código de caractere multilíngue de 2 bytes. Dezenas de milhares de caracteres, compreendendo quase todos os caracteres usados na computação moderna em todo o mundo, inclusive símbolos técnicos e caracteres de publicação especiais, podem ser representados de acordo com a especificação Unicode como um único caractere largo codificado usando UTF-16. Caracteres que não podem ser representados em um único caractere largo podem ser representados em um par Unicode usando o recurso de par substituto Unicode. Como quase todos os caracteres em uso comum são representados em UTF-16 em um único caractere largo de 16 bits, o uso de caracteres largos simplifica a programação com conjuntos de caracteres internacionais. Caracteres largos codificados usando UTF-16LE (para little-endian) são o formato de caractere nativo para Windows.

Uma cadeia de caracteres largos é representada como uma matriz wchar_t[] e é indicada por um ponteiro wchar_t*. Qualquer caractere ASCII pode ser representado como um caractere largo usando a letra L como prefixo do caractere. Por exemplo, L'\0' é o caractere largo de terminação NULL (16 bits). Da mesma forma, qualquer literal da cadeia de caracteres ASCII pode ser representado como literal da cadeia de caracteres larga usando a letra L como prefixo do literal ASCII (L"Hello").

Em geral, caracteres largos ocupam mais espaço na memória do que caracteres multibyte, mas eles são mais rápidos de processar. Além disso, apenas um idioma pode ser representado por vez em uma codificação multibyte, ao passo que todos os conjuntos de caracteres do mundo são representados simultaneamente na representação Unicode.

A estrutura de MFC é completamente habilitada para Unicode, e o MFC realiza a ativação de Unicode usando macros portáteis, como mostrado na tabela a seguir.

Tipos de dados portáteis no MFC

Tipo de dados não portátil Substituído por este macro
char, wchar_t _TCHAR
char*, LPSTR (Tipo de dados do Win32), LPWSTR LPTSTR
const char*, LPCSTR (Tipo de dados do Win32), LPCWSTR LPCTSTR

A classe CString usa _TCHAR como base e oferece construtores e operadores para conversões fáceis. A maioria das operações com cadeias para Unicode pode ser gravada com a mesma lógica usada para lidar com o conjunto de caracteres ANSI do Windows, exceto pelo fato de que a unidade básica de operação é um caractere de 16 bits, ao invés de um byte de 8 bits. Diferente de trabalhar com conjuntos de caractere multibyte, você não precisa (e não deve) tratar um caractere Unicode como se ele fosse dois bytes distintos. No entanto, você precisa lidar com a possibilidade de um único caractere representado por um par alternativo de caracteres largos. Em geral, não escreva um código que pressupõe que o comprimento de uma cadeia de caracteres seja igual ao número de caracteres, seja estreito ou largo, que ela contenha.

O que você deseja fazer?

Confira também

Texto e cadeias de caracteres
Suporte para usar wmain