Obsługa formatu UnicodeSupport for Unicode

Unicode to specyfikacja do obsługi wszystkich zestawów znaków, w tym tych, które nie mogą być reprezentowane w pojedynczym bajcie.Unicode is a specification for supporting all character sets, including ones that can't be represented in a single byte. Jeśli planujesz Programowanie na rynku międzynarodowym, zalecamy użycie zestawu znaków Unicode lub wielobajtowego (MBCS).If you're programming for an international market, we recommend you use either Unicode or a multibyte character set (MBCS). Lub Zakoduj program, aby można było go skompilować przez zmianę przełącznika.Or, code your program so you can build it for either by changing a switch.

Znak dwubajtowy to kod 2-bitowy.A wide character is a 2-byte multilingual character code. Dziesiątki tysięcy znaków, składające się na prawie wszystkie znaki używane w nowoczesnej skali na całym świecie, w tym symbole techniczne i znaki specjalne publikacji, mogą być reprezentowane zgodnie ze specyfikacją Unicode jako pojedynczy znak dwubajtowy zakodowany przy użyciu kodowania UTF-16.Tens of thousands of characters, comprising almost all characters used in modern computing worldwide, including technical symbols and special publishing characters, can be represented according to the Unicode specification as a single wide character encoded by using UTF-16. Znaki, które nie mogą być reprezentowane w tylko jednym znaku dwubajtowym, mogą być reprezentowane w parze Unicode przy użyciu funkcji wieloskładnikowej pary Unicode.Characters that cannot be represented in just one wide character can be represented in a Unicode pair by using the Unicode surrogate pair feature. Ponieważ niemal każdy znak w typowym użyciu jest reprezentowany w UTF-16 w pojedynczym 16-bitowym znaku, za pomocą znaków dwubajtowych upraszcza programowanie z międzynarodowymi zestawami znaków.Because almost every character in common use is represented in UTF-16 in a single 16-bit wide character, using wide characters simplifies programming with international character sets. Znaki dwubajtowe zakodowane przy użyciu kodowania UTF-16LE (dla little-endian) są natywnym formatem znaków dla systemu Windows.Wide characters encoded using UTF-16LE (for little-endian) are the native character format for Windows.

Ciąg znaków dwubajtowych jest reprezentowany jako wchar_t[] Tablica i jest wskazywany przez wchar_t* wskaźnik.A wide-character string is represented as a wchar_t[] array and is pointed to by a wchar_t* pointer. Dowolny znak ASCII może być reprezentowany jako znak dwubajtowy, tworząc prefiks litery L do znaku.Any ASCII character can be represented as a wide character by prefixing the letter L to the character. Na przykład L ' \ 0 ' jest znakiem o ZEROWEj szerokości (16-bitowym).For example, L'\0' is the terminating wide (16-bit) NULL character. Podobnie każdy literał ciągu ASCII może być reprezentowany jako literał ciągu znaków dwubajtowych, tworząc prefiks litery L do literału ASCII (L "Hello").Similarly, any ASCII string literal can be represented as a wide-character string literal by prefixing the letter L to the ASCII literal (L"Hello").

Ogólnie rzecz biorąc, szerokie znaki pobierają więcej miejsca w pamięci niż znaki wielobajtowe, ale szybciej są przetwarzane.Generally, wide characters take more space in memory than multibyte characters but are faster to process. Ponadto w przypadku kodowania wielobajtowego można reprezentować tylko jedne ustawienia regionalne, natomiast wszystkie zestawy znaków na świecie są reprezentowane jednocześnie przez reprezentację Unicode.In addition, only one locale can be represented at a time in a multibyte encoding, whereas all character sets in the world are represented simultaneously by the Unicode representation.

Platforma MFC jest włączona w systemie Unicode, a MFC umożliwia włączenie standardu Unicode przy użyciu makr przenośnych, jak pokazano w poniższej tabeli.The MFC framework is Unicode-enabled throughout, and MFC accomplishes Unicode enabling by using portable macros, as shown in the following table.

Przenośne typy danych w MFCPortable Data Types in MFC

Nieprzenośny typ danychNon-portable data type Zastąpione przez to makroReplaced by this macro
char, wchar_tchar, wchar_t _TCHAR
char*, LPSTR (Typ danych Win32), LPWSTRchar*, LPSTR (Win32 data type), LPWSTR LPTSTR
const char*, LPCSTR (Typ danych Win32), LPCWSTRconst char*, LPCSTR (Win32 data type), LPCWSTR LPCTSTR

Klasa CString używa _TCHAR jako bazy i zawiera konstruktory i operatory do łatwego konwersji.Class CString uses _TCHAR as its base and provides constructors and operators for easy conversions. Większość operacji na ciągach dla Unicode można napisać przy użyciu tej samej logiki, która jest używana do obsługi zestawu znaków ANSI systemu Windows, z tą różnicą, że podstawowa jednostka operacji jest 16-bitowym znakiem, a nie 8-bitowym bajtem.Most string operations for Unicode can be written by using the same logic used for handling the Windows ANSI character set, except that the basic unit of operation is a 16-bit character instead of an 8-bit byte. W przeciwieństwie do pracy z zestawami znaków wielobajtowych nie ma potrzeby traktowania znaków Unicode, tak jakby były dwa odrębne bajty.Unlike working with multibyte character sets, you do not have to (and should not) treat a Unicode character as if it were two distinct bytes. Należy jednak koniecznie zaradzić sobie z możliwością pojedynczego znaku reprezentowanego przez wieloskładnikową parę znaków.You do, however, have to deal with the possibility of a single character represented by a surrogate pair of wide characters. Ogólnie rzecz biorąc nie należy pisać kodu, który zakłada, że długość ciągu jest taka sama jak liczba znaków w wąskim lub szerokim, która zawiera.In general, do not write code that assumes the length of a string is the same as the number of characters, whether narrow or wide, that it contains.

Co chcesz zrobić?What do you want to do?

Zobacz teżSee also

Tekst i ciągiText and Strings
Obsługa używania wmainSupport for Using wmain