Dela via


Stöd för Unicode

Unicode är en specifikation för att stödja alla teckenuppsättningar, inklusive de som inte kan representeras i en enda byte. Om du programmerar för en internationell marknad rekommenderar vi att du använder antingen Unicode eller en MBCS -teckenuppsättning (multibyte ). Eller koda ditt program så att det kan byggas för båda alternativen genom att ändra en inställning.

Ett brett tecken är en flerspråkig teckenkod på 2 byte. Tiotusentals tecken, som består av nästan alla tecken som används i modern databehandling över hela världen, inklusive tekniska symboler och specialpubliceringstecken, kan representeras enligt Unicode-specifikationen som ett enda brett tecken som kodas med hjälp av UTF-16. Tecken som inte kan representeras med bara ett brett tecken kan representeras i ett Unicode-par med hjälp av unicode-surrogatparfunktionen. Eftersom nästan alla tecken som används är representerade i UTF-16 i ett enda 16-bitars brett tecken, förenklar användningen av breda tecken programmering med internationella teckenuppsättningar. Breda tecken som kodas med UTF-16LE (för little-endian) är det interna teckenformatet för Windows.

En sträng med breda tecken representeras som en wchar_t[] matris och pekas på av en wchar_t* pekare. Alla ASCII-tecken kan representeras som ett brett tecken genom att prefixa bokstaven L till tecknet. L'\0 är till exempel det avslutande breda (16-bitars) NULL-tecknet. På samma sätt kan alla ASCII-strängliteraler representeras som en strängliteral med breda tecken genom att prefixa bokstaven L till ASCII-literalen (L"Hello").

I allmänhet tar breda tecken mer utrymme i minnet än flerbytestecken men är snabbare att bearbeta. Dessutom kan endast en språkvariant representeras i taget i en kodning i flerabyte, medan alla teckenuppsättningar i världen representeras samtidigt av Unicode-representationen.

MFC-ramverket är Unicode-aktiverat hela tiden och MFC utför Unicode-aktivering med hjälp av bärbara makron, enligt följande tabell.

Portabla datatyper i MFC

Datatyp som inte är portabel Ersatt av det här makrot
char, wchar_t _TCHAR
char*, LPSTR (Win32-datatyp), LPWSTR LPTSTR
const char*, LPCSTR (Win32-datatyp), LPCWSTR LPCTSTR

Klassen CString använder _TCHAR som bas och tillhandahåller konstruktorer och operatorer för enkla konverteringar. De flesta strängåtgärder för Unicode kan skrivas med samma logik som används för att hantera Windows ANSI-teckenuppsättningen, förutom att den grundläggande åtgärdsenheten är ett 16-bitarstecken i stället för en 8-bitars byte. Till skillnad från att arbeta med flerbytesteckenuppsättningar behöver du inte (och bör inte) behandla ett Unicode-tecken som om det vore två distinkta byte. Du måste dock hantera möjligheten till ett enda tecken som representeras av ett surrogatpar med breda tecken. Skriv i allmänhet inte kod som förutsätter att längden på en sträng är samma som antalet tecken, oavsett om de är smala eller breda, som den innehåller.

Vad vill du göra?

Se även

Text och strängar
Stöd för användning av wmain