Udostępnij za pośrednictwem


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ć polecenia char.

    • Użyj LPTSTR miejsca, w którym należy użyć polecenia char*.

    • Użyj LPCTSTR miejsca, w którym należy użyć polecenia const char*. CString udostępnia operator LPCTSTR do konwersji między CString i LPCTSTR.

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 strcmpfunkcję , 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 charLPCTSTR* lub const wchar_t*. Zapewniają one poprawne mapowania dla MBCS lub Unicode.

Zobacz też

Ciągi (ATL/MFC)
Manipulowanie ciągami