Sdílet prostřednictvím


Podpora znakových sad Unicode a MBCS

Některé jazyky, například japonština a čínština, mají velké znakové sady. Pro podporu programování pro tyto trhy umožňuje knihovna MFC (Microsoft Foundation Class Library) dva různé přístupy ke zpracování velkých znakových sad:

  • Unicode, wchar_t široké znaky a řetězce kódované jako UTF-16.

  • Vícebajtové znakové sady (MBCS)char založené na jednoduchých nebo dvoubajtových znacích a řetězcích kódovaných v znakové sadě specifické pro národní prostředí.

Poznámka:

Microsoft doporučuje knihovny MFC Unicode pro veškerý nový vývoj.
Knihovny MBCS byly v sadě Visual Studio 2013 a Visual Studio 2015 zastaralé. To již neplatí.
Od sady Visual Studio 2017 už nejsou knihovny MBCS zastaralé a nevygenerují upozornění na vyřazení.

Podpora MFC pro řetězce Unicode

Celá knihovna tříd MFC je podmíněně povolena pro znaky Unicode a řetězce uložené v širokých znacích jako UTF-16. Konkrétně je třída CString povolena unicode.

Tyto knihovny, ladicí program a soubory DLL slouží k podpoře kódování Unicode v prostředí MFC:

MFCverzeU.LIB
UD verzeMFC. OSVOBOZENÍ
MFCMverzeU.LIB
UD verzeMFCM. OSVOBOZENÍ
MFCSverzeU.LIB
UD verzeMFCS. OSVOBOZENÍ
UAFXCW. OSVOBOZENÍ
UAFXCWD. OSVOBOZENÍ

MFCverzeU.PDB
UD verzeMFC. PDB
MFCMverzeU.PDB
UD verzeMFCM. PDB
MFCSverzeU.PDB
UD verzeMFCS. PDB
UAFXCW. PDB
UAFXCWD. PDB

U.DLL verzeMFC
UD.DLL verzeMFC
U.DLL verzeMFCM
UD.DLL verzeMFCM

(verze představuje číslo verze souboru, například "140" znamená verzi 14.0.)

CString je založen na datovém TCHAR typu. Pokud je symbol _UNICODE definovaný pro sestavení programu, TCHAR je definován jako typ wchar_t, 16bitový typ kódování znaků. TCHAR V opačném případě je definováno jako charnormální 8bitové kódování znaků. Proto se v části Unicode CString skládá z 16bitových znaků. Bez Unicode se skládá z znaků typu char.

K dokončení programování v kódování Unicode aplikace musíte také:

  • _T Makro použijte k podmíněnému kódování literálových řetězců, které se mají přenášet do Unicode.

  • Při předávání řetězců věnujte pozornost tomu, zda argumenty funkce vyžadují délku znaků nebo délku v bajtech. Rozdíl je důležitý, pokud používáte řetězce Unicode.

  • Používejte přenosné verze funkcí pro zpracování řetězců za běhu jazyka C.

  • Pro znaky a ukazatele znaků použijte následující datové typy:

    • Použijte TCHAR místo, kde byste použili char.

    • Použijte LPTSTR místo, kde byste použili char*.

    • Použijte LPCTSTR místo, kde byste použili const char*. CString poskytuje operátor LPCTSTR pro převod mezi CString a LPCTSTR.

CString poskytuje také konstruktory podporující kódování Unicode, operátory přiřazení a relační operátory.

Referenční dokumentace knihovny run-time definuje přenosné verze všech jejích funkcí pro zpracování řetězců. Další informace naleznete v kategorii Internationalization.

Podpora MFC pro řetězce MBCS

Knihovna tříd je také povolena pro vícebajtové znakové sady, ale pouze pro dvoubajtové znakové sady (DBCS).

Ve vícebajtové znakové sadě může být jeden nebo 2 bajty široké. Pokud je 2 bajty široké, první bajt je speciální "bajt potenciálního bajtu", který je vybrán z konkrétního rozsahu v závislosti na tom, kterou znakovou stránku se používá. Dohromady hlavní bajty a bajty stop určují jedinečné kódování znaků.

Pokud je symbol _MBCS definován pro sestavení programu, zadejte TCHAR, na kterém CString je založeno, mapuje na char. Je na vás, abyste zjistili, které bajty v CString bajtech vedou a které jsou bajty stop. Knihovna runtime jazyka C poskytuje funkce, které vám pomůžou určit.

V části DBCS může daný řetězec obsahovat všechny jednobajtové znaky ANSI, všechny dvoubajtové znaky nebo kombinaci těchto dvou znaků. Tyto možnosti vyžadují zvláštní péči při analýze řetězců. To zahrnuje CString objekty.

Poznámka:

Serializace řetězců Unicode v prostředí MFC může číst řetězce Unicode i MBCS bez ohledu na to, jakou verzi aplikace používáte. Datové soubory se dají přenášet mezi verzemi Unicode a MBCS vašeho programu.

CString členské funkce používají speciální "obecné textové" verze funkcí běhu jazyka C, které volají, nebo používají funkce podporující kódování Unicode. Proto pokud CString by funkce obvykle volala strcmp, volá místo toho odpovídající obecnou textovou funkci _tcscmp . V závislosti na tom, jak jsou symboly _MBCS definované _UNICODE , _tcscmp se mapují takto:

Symboly Function
_MBCS definovaný _mbscmp
_UNICODE definovaný wcscmp
Ani jeden ze symbolů definovaných strcmp

Poznámka:

Symboly _MBCS a _UNICODE vzájemně se vylučují.

Mapování obecných textových funkcí pro všechny rutiny zpracování řetězců za běhu jsou popsány v referenční dokumentaci knihovny runtime jazyka C. Seznam naleznete v tématu Internationalization.

CString Podobně se metody implementují pomocí obecného mapování datových typů. Chcete-li povolit mbCS a Unicode, mfc používá pro nebo LPTSTR , pro char* nebo wchar_t*a LPCTSTR pro const char* nebo .const wchar_t*wchar_tchar TCHAR Ty zajišťují správné mapování pro MBCS nebo Unicode.

Viz také

Řetězce (ATL/MFC)
Manipulace s řetězci