Podpora národních prostředí
Většina tradičního kódu C a C++ vytváří předpoklady o manipulaci s znaky a řetězci, které nefungují dobře pro mezinárodní aplikace. I když mfc i knihovna runtime podporují Unicode nebo MBCS, stále můžete pracovat. Tato část vás provede vysvětlením významu "mezinárodního povolení" v jazyce Visual C++:
Unicode i MBCS jsou povoleny prostřednictvím přenosných datových typů v seznamech parametrů funkce MFC a návratových typů. Tyto typy jsou podmíněně definovány příslušnými způsoby v závislosti na tom, jestli sestavení definuje symbol
_UNICODE
nebo symbol_MBCS
(což znamená DBCS). Různé varianty knihoven MFC jsou automaticky propojeny s vaší aplikací v závislosti na tom, které z těchto dvou symbolů vaše sestavení definuje.Kód knihovny tříd používá přenosné funkce za běhu a další prostředky k zajištění správného chování unicode nebo MBCS.
V kódu stále musíte zpracovávat určité druhy úloh internacionalizace:
Použijte stejné přenosné funkce za běhu, které umožňují přenositelné prostředí MFC v obou prostředích.
Zajistěte, aby se literální řetězce a znaky přenášely v obou prostředích pomocí
_T
makra. Další informace naleznete v tématu Mapování obecného textu v tchar.h.Při analýze řetězců v rámci služby MBCS proveďte opatření. Tato opatření nejsou v kódování Unicode nutná. Další informace naleznete v tématu Tipy pro programování mbCS.
Při kombinaci znaků ANSI (8bitová) a Unicode (16bitová verze) ve vaší aplikaci buďte obezřetní. V některých částech programu a znaků Unicode je možné v jiných používat znaky ANSI, ale nemůžete je kombinovat ve stejném řetězci.
Ve vaší aplikaci pevně nezakódujte řetězce. Místo toho je přidejte do souboru .rc aplikace prostředky STRINGTABLE. Aplikace se pak může lokalizovat bez nutnosti změn zdrojového kódu nebo rekompilace. Další informace o prostředcích STRINGTABLE naleznete v tématu Editor řetězců.
Poznámka:
Evropské znakové sady a znakové sady MBCS mají některé znaky, jako jsou písmena se zvýrazněnými písmeny, s kódy znaků většími než 0x80. Vzhledem k tomu, že většina kódu používá znaky se znaménkem, tyto znaky větší než 0x80 jsou při převodu na int
. Jedná se o problém indexování pole, protože znaky s rozšířenými znaménkami, které jsou záporné, indexy mimo pole. Jazyky, které používají službu MBCS, jako je japonština, jsou také jedinečné. Vzhledem k tomu, že znak může obsahovat 1 nebo 2 bajty, měli byste vždy manipulovat s oběma bajty najednou.