Unterstützung für Unicode- und Multibyte-Zeichensätze (MBCS)
Einige Sprachen wie Japanisch und Chinesisch haben große Zeichensätze. Zur Unterstützung der Programmierung für diese Märkte ermöglicht die Microsoft Foundation Class Library (MFC) zwei verschiedene Ansätze für die Behandlung großer Zeichensätze:
Unicode,
wchar_t
basierte Breitzeichen und Zeichenfolgen, die als UTF-16 codiert sind.Multibyte-Zeichensätze (MBCS),
char
basierend auf einzel- oder Doppelbytezeichen und Zeichenfolgen, die in einem gebietsschemaspezifischen Zeichensatz codiert sind.
Hinweis
Microsoft empfiehlt die MFC Unicode-Bibliotheken für alle neuen Entwicklungen.
Die MBCS-Bibliotheken sind in Visual Studio 2013 und Visual Studio 2015 veraltet. Das ist nicht mehr der Fall.
Ab Visual Studio 2017 sind die MBCS-Bibliotheken nicht mehr veraltet und generieren keine Veraltetkeitswarnungen.
MFC-Unterstützung für Unicode-Zeichenfolgen
Die gesamte MFC-Klassenbibliothek ist bedingt für Unicode-Zeichen und Zeichenfolgen aktiviert, die in breiten Zeichen als UTF-16 gespeichert sind. Insbesondere ist die Klasse CString
Unicode-aktiviert.
Diese Bibliotheks-, Debugger- und DLL-Dateien werden verwendet, um Unicode in MFC zu unterstützen:
MFC-VersionU.LIB
MFC-VersionUD. BEFREIEN
MFCM-VersionU.LIB
MFCM-VersionUD. BEFREIEN
MFCS-VersionU.LIB
MFCS-VersionUD. BEFREIEN
UAFXCW.LIB
UAFXCWD.LIB
MFC-VersionU.PDB
MFC-VersionUD. PDB
MFCM-VersionU.PDB
MFCM-VersionUD. PDB
MFCS-VersionU.PDB
MFCS-VersionUD. PDB
UAFXCW.PDB
UAFXCWD.PDB
MFC-VersionU.DLL
MFC-VersionUD.DLL
MFCM-VersionU.DLL
MFCM-VersionUD.DLL
(Version stellt die Versionsnummer der Datei dar, z. B. "140" bedeutet Version 14.0.)
CString
basiert auf dem TCHAR
Datentyp. Wenn das Symbol _UNICODE
für einen Build Ihres Programms definiert ist, TCHAR
wird er als Typ wchar_t
definiert, ein 16-Bit-Zeichencodierungstyp. TCHAR
Andernfalls ist die char
normale 8-Bit-Zeichencodierung definiert. Daher setzt sich ein CString
unter Unicode aus 16-Bit-Zeichen zusammen. Ohne Unicode besteht es aus Zeichen vom Typ char
.
Um Unicode-Programmierung der Anwendung durchzuführen, benötigen Sie auch Folgendes:
Verwenden Sie das
_T
Makro, um literale Zeichenfolgen bedingt zu codieren, um in Unicode portierbar zu sein.Wenn Sie Zeichenfolgen übergeben, achten Sie darauf, ob für Funktionsargumente eine bestimmte Länge in Zeichen oder in Bytes erforderlich. Der Unterschied ist wichtig, wenn Sie Unicode-Zeichenfolgen verwenden.
Verwenden Sie portable Versionen der C-Funktionen zur Behandlung von Zeichenfolgen zur Laufzeit.
Verwenden Sie die folgenden Datentypen für Zeichen und Zeichenzeiger:
Verwenden Sie
TCHAR
die Stelle, an der Sie verwendenchar
würden.Verwenden Sie
LPTSTR
die Stelle, an der Sie verwendenchar
*würden.Verwenden Sie
LPCTSTR
die Stelle, an der Sie verwendenconst char
*würden.CString
stellt den OperatorLPCTSTR
zum Konvertieren zwischenCString
undLPCTSTR
.
CString
stellt außerdem Unicode-kompatible Konstruktoren, Zuweisungsoperatoren und Vergleichsoperatoren bereit.
Die Laufzeitbibliotheksreferenz definiert portable Versionen aller Zeichenfolgenbehandlungsfunktionen. Weitere Informationen finden Sie in der Kategorie Internationalisierung.
MFC-Unterstützung für MBCS-Zeichenfolgen
Die Klassenbibliothek wird auch für Multibyte-Zeichensätze, jedoch nur für Doppelbyte-Zeichensätze (DBCS) aktiviert.
In einem Multibyte-Zeichensatz kann ein Zeichen ein oder 2 Byte breit sein. Wenn es 2 Byte breit ist, ist das erste Byte ein spezielles "Leadbyte", das aus einem bestimmten Bereich ausgewählt wird, je nachdem, welche Codepage verwendet wird. Zusammen angewendet, geben die führenden und die "nachfolgenden Bytes" eine eindeutige Zeichencodierung an.
Wenn das Symbol _MBCS
für einen Build Ihres Programms definiert ist, geben Sie TCHAR
das Symbol ein, auf dem CString
basiert, zugeordnet char
. Es liegt an Ihnen, zu bestimmen, welche Bytes in einem CString
Leadbyte sind und welche Trailbytes sind. Die Zubehörfunktionen der C-Laufzeitbibliothek unterstützen Sie dabei.
Unter DBCS kann eine angegebene Zeichenfolge alle Einzelbyte-ANSI-Zeichen, alle Doppelbytezeichen oder eine Kombination der beiden enthalten. Diese Methoden erfordern besondere Sorgfalt beim Parsen von Zeichenfolgen. Hierzu gehören CString
-Objekte.
Hinweis
Mit der Serialisierung von Unicode-Zeichenfolgen in MFC können sowohl Unicode als auch MBCS-Zeichenfolgen unabhängig von der Version der Anwendung, die Sie ausführen, gelesen werden. Die Datendateien sind zwischen Unicode- und MBCS-Versionen des Programms übertragbar.
CString
-Memberfunktionen verwenden spezielle Versionen der C-Laufzeitfunktionen mit "generischem Text", die aufgerufen werden, oder sie verwenden Unicode-kompatible Funktionen. Wenn daher eine CString
-Funktion normalerweise strcmp
aufrufen würde, ruft sie stattdessen die entsprechende Funktion _tcscmp
für generischen Text auf. Je nachdem, wie die Symbole _MBCS
definiert sind und _UNICODE
wie folgt zugeordnet _tcscmp
werden:
Sonderzeichen | Funktion |
---|---|
_MBCS definiert |
_mbscmp |
_UNICODE definiert |
wcscmp |
Kein Symbol definiert | strcmp |
Hinweis
Die Symbole _MBCS
schließen _UNICODE
sich gegenseitig aus.
Generische Funktionszuordnungen für alle Laufzeit-Zeichenfolgenbehandlungsroutinen werden in der C-Laufzeitbibliotheksreferenz erläutert. Eine Liste finden Sie unter "Internationalisierung".
CString
Ebenso werden Methoden mithilfe generischer Datentypzuordnungen implementiert. Um MBCS und Unicode zu aktivieren, verwendet TCHAR
MFC für char
oder , LPTSTR
für oder wchar_t
, für char
* oder wchar_t*
LPCTSTR
für oder const wchar_t*
. const char
* . Diese stellen die richtigen Zuordnungen für Unicode oder MBCS sicher.