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 char
normá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žilichar
.Použijte
LPTSTR
místo, kde byste použilichar
*.Použijte
LPCTSTR
místo, kde byste použiliconst char
*.CString
poskytuje operátorLPCTSTR
pro převod meziCString
aLPCTSTR
.
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_t
char
TCHAR
Ty zajišťují správné mapování pro MBCS nebo Unicode.