Obsługa Unicode i Multibyte Character Set (MBCS)
Niektóre języki, na przykład japoński i chiński, mają duże zestawy znaków. W celu obsługi programowania na tych rynkach biblioteka klas Microsoft Foundation (MFC) umożliwia obsługę dużych zestawów znaków w dwóch różnych podejściach:
Unicode,
wchar_t
oparte na szerokich znakach i ciągach zakodowanych jako UTF-16.Zestawy znaków wielobajtowych (MBCS)
char
oparte na pojedynczych lub dwubajtowych znakach i ciągach zakodowanych w zestawie znaków specyficznych dla ustawień regionalnych.
Uwaga
Firma Microsoft zaleca biblioteki MFC Unicode dla wszystkich nowych programowania.
Biblioteki MBCS zostały uznane za przestarzałe w programach Visual Studio 2013 i Visual Studio 2015. Obecnie taka ewentualność nie zachodzi.
Począwszy od programu Visual Studio 2017, biblioteki MBCS nie są już przestarzałe i nie generują ostrzeżeń o wycofaniu.
Obsługa MFC dla ciągów Unicode
Cała biblioteka klas MFC jest warunkowo włączona dla znaków Unicode i ciągów przechowywanych w postaci znaków szerokich jako UTF-16. W szczególności klasa CString
jest włączona w formacie Unicode.
Te biblioteki, debuger i pliki DLL są używane do obsługi formatu Unicode w MFC:
WersjaMFCU.LIB
UD wersjiMFC. LIB
Wersja narzędzia MFCMU.LIB
Ud wersjiprogramu MFCM. LIB
Wersja MFCSU.LIB
UD wersjiMFCS. LIB
UAFXCW. LIB
UAFXCWD. LIB
Wersja MFCU.PDB
UD wersjiMFC. PDB
Wersja MFCMU.PDB
Ud wersjiprogramu MFCM. PDB
Wersja MFCSU.PDB
UD wersjiMFCS. PDB
UAFXCW. PDB
UAFXCWD. PDB
U.DLL wersjiMFC
UD.DLL wersjiMFC
U.DLL wersjiprogramu MFCM
UD.DLL wersjiprogramu MFCM
(wersja reprezentuje numer wersji pliku, na przykład "140" oznacza wersję 14.0).
CString
jest oparty na typie TCHAR
danych. Jeśli symbol _UNICODE
jest zdefiniowany dla kompilacji programu, TCHAR
jest zdefiniowany jako typ wchar_t
, 16-bitowy typ kodowania znaków. TCHAR
W przeciwnym razie jest definiowana jako char
, normalne kodowanie znaków 8-bitowych. W związku z tym w formacie Unicode element CString
składa się z 16-bitowych znaków. Bez formatu Unicode składa się z znaków typu char
.
Aby ukończyć programowanie Unicode aplikacji, należy również:
Użyj makra
_T
, aby warunkowo kodować ciągi literału, które mają być przenośne do formatu Unicode.Podczas przekazywania ciągów zwróć uwagę na to, czy argumenty funkcji wymagają długości znaków, czy długości w bajtach. Różnica jest ważna, jeśli używasz ciągów Unicode.
Użyj przenośnych wersji funkcji obsługi ciągów w czasie wykonywania języka C.
Użyj następujących typów danych dla znaków i wskaźników znaków:
Użyj
TCHAR
miejsca, w którym należy użyć poleceniachar
.Użyj
LPTSTR
miejsca, w którym należy użyć poleceniachar
*.Użyj
LPCTSTR
miejsca, w którym należy użyć poleceniaconst char
*.CString
udostępnia operatorLPCTSTR
do konwersji międzyCString
iLPCTSTR
.
CString
Dostarcza również konstruktory obsługujące unicode, operatory przypisania i operatory porównania.
Odwołanie do biblioteki czasu wykonywania definiuje przenośne wersje wszystkich funkcji obsługi ciągów. Aby uzyskać więcej informacji, zobacz kategorię Internationalization (Internationalization).
Obsługa MFC dla ciągów MBCS
Biblioteka klas jest również włączona dla zestawów znaków wielobajtowych, ale tylko w przypadku zestawów znaków dwubajtowych (DBCS).
W zestawie znaków wielobajtowych znak może być jeden lub 2 bajty szerokości. Jeśli ma 2 bajty szerokości, jego pierwszy bajt jest specjalnym "bajtem ołowiu", który jest wybierany z określonego zakresu, w zależności od używanej strony kodowej. Połączmy prowadzić i "bajty końcowe" określają unikatowe kodowanie znaków.
Jeśli symbol _MBCS
jest zdefiniowany dla kompilacji programu, wpisz TCHAR
, na którym CString
jest oparta, mapuje na char
. Zależy to od Ciebie, aby określić, które bajty w obiekcie CString
są bajtami ołowiu i które są bajtami końcowymi. Biblioteka języka C w czasie wykonywania dostarcza funkcje ułatwiające określenie tego.
W obszarze DBCS dany ciąg może zawierać wszystkie znaki ANSI jednobajtowe, wszystkie znaki dwubajtowe lub kombinację tych dwóch znaków. Te możliwości wymagają specjalnej staranności w analizowaniu ciągów. CString
Obejmuje to obiekty.
Uwaga
Serializacja ciągów Unicode w MFC może odczytywać ciągi Unicode i MBCS niezależnie od wersji uruchomionej aplikacji. Pliki danych są przenośne między wersjami unicode i MBCS programu.
CString
Funkcje składowe używają specjalnych "ogólnych wersji tekstowych" wywoływanych przez nich funkcji czasu wykonywania języka C lub używają funkcji obsługujących unicode. W związku z tym, jeśli CString
na przykład funkcja zwykle wywołuje strcmp
funkcję , wywołuje odpowiednią funkcję _tcscmp
ogólnego tekstu. W zależności od sposobu i sposobu definiowania _tcscmp
symboli _MBCS
_UNICODE
mapuje się w następujący sposób:
Symbole | Function |
---|---|
_MBCS zdefiniowany |
_mbscmp |
_UNICODE zdefiniowany |
wcscmp |
Żaden z symboli nie został zdefiniowany | strcmp |
Uwaga
Symbole _MBCS
i _UNICODE
wzajemnie się wykluczają.
Ogólne mapowania funkcji tekstowych dla wszystkich procedur obsługi ciągów czasu wykonywania zostały omówione w dokumentacji biblioteki czasu wykonywania języka C. Aby uzyskać listę, zobacz Internationalization (Internacjonalizacja).
CString
Podobnie metody są implementowane przy użyciu ogólnych mapowań typów danych. Aby włączyć zarówno MBCS, jak i Unicode, MFC używa dla TCHAR
char
lub , LPTSTR
dla char
* lub wchar_t*
wchar_t
, i dla const char
LPCTSTR
* lub const wchar_t*
. Zapewniają one poprawne mapowania dla MBCS lub Unicode.