Unterstützung für Unicode- und Multibyte-Zeichensätze (MBCS)

 

Veröffentlicht: August 2016

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

Einige Sprachen wie Japanisch und Chinesisch haben große Zeichensätze. Um Programmierung für diese Märkte zu unterstützen, ist die Microsoft Foundation Class-Bibliothek (MFC-Bibliothek) so aktiviert, zwei unterschiedliche Ansätze zum Behandeln von umfangreichen Zeichensätzen verwendet werden können:

Sie sollten für alle Neuentwicklungen Unicode verwenden.

Die gesamte Klassenbibliothek wird bedingt für Unicode-Zeichen und -Zeichenfolgen aktiviert. Insbesondere ist Klasse CString Unicode-aktiviert.

UAFXCW.LIBUAFXCW.PDBUAFXCWD.LIBUAFXCWD.PDB
MFCxxU.LIBMFCxxU.PDBMFCxxU.DLLMFCxxUD.LIB
MFCxxUD.PDBMFCxxUD.DLLMFCSxxU.LIBMFCSxxU.PDB
MFCSxxUD.LIBMFCSxxUD.PDBMFCMxxU.LIBMFCMxxU.PDB
MFCMxxU.DLLMFCMxxUD.LIBMFCMxxUD.PDBMFCMxxUD.DLL

(xx stellt die Versionsnummer der Datei dar; "80" bedeutet z. B. Version 8.0.)

CString basiert auf dem Datentyp TCHAR. Wenn das Symbol _UNICODE für einen Build des Programms definiert ist, wird TCHAR als wchar_t-Typ, ein 16-Bit-Zeichencodierungstyp, definiert. Andernfalls wird TCHAR als char, die normale 8-Bit-Zeichencodierung, definiert. Daher setzt sich ein CString unter Unicode aus 16-Bit-Zeichen zusammen. Ohne Unicode wird es aus Zeichen vom Typ char zusammengesetzt.

Um Unicode-Programmierung der Anwendung durchzuführen, benötigen Sie auch Folgendes:

  • Verwenden Sie das _T-Makro, um Zeichenfolgen bedingt so zu kodieren, dass sie in Unicode übertragbar sind.

  • 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:

    • TCHAR. Hier verwenden Sie char.

    • LPTSTR. Hier verwenden Sie char*.

    • LPCTSTR. Hier verwenden Sie const char*. CString stellt den Operator LPCTSTR zum Konvertieren zwischen CString und LPCTSTR bereit.

CString stellt außerdem Unicode-kompatible Konstruktoren, Zuweisungsoperatoren und Vergleichsoperatoren bereit.

Weitere Informationen zur Unicode-Programmierung finden Sie unter den Unicode-Themen. Die Laufzeitbibliotheksreferenz definiert portable Versionen aller seiner Funktionen zur Behandlung von Zeichenfolgen. Siehe die Kategorie Internationalisierung.

System_CAPS_ICON_warning.jpg Warnung

MBCS-Zeichenfolgen sind veraltet und sollten in neuen Projekten nicht verwendet werden. Die folgenden Informationen gelten für Szenarien, in denen Sie vorhandenen Code beibehalten müssen, der MBCS verwendet und nicht auf Unicode aktualisiert werden kann.

Die Klassenbibliothek wird auch für Multibyte-Zeichensätze, jedoch nur für Doppelbyte-Zeichensätze (DBCS) aktiviert.

System_CAPS_ICON_important.jpg Wichtig

In Visual Studio 2013 und höher, sind die MBCS-Versionen der MFC-DLLs nicht als freies Add-In für Visual Studio auf der MSDN-Downloadsite verfügbar. Weitere Informationen finden Sie unter MBCS-Add-In für MFC-DLLs.

In einem Multibyte-Zeichensatz kann ein Zeichen ein oder zwei Bytes breit sein. Wenn es zwei Bytes breit ist, ist sein erstes Byte ein spezielles "führendes Byte", das je nach verwendeter Codepage aus einem bestimmten Bereich ausgewählt wird. Zusammen angewendet, geben die führenden und die "nachfolgenden Bytes" eine eindeutige Zeichencodierung an.

Wenn das Symbol _MBCS für einen Build des Programms definiert ist, wird der Typ TCHAR, auf dem CString basiert, char zugeordnet. Sie bestimmen, welche Bytes in einer CString führende Bytes und welche nachfolgende Bytes 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.

System_CAPS_ICON_note.jpg 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 und _UNICODE definiert werden, wird _tcscmp wie folgt zugeordnet:

_MBCS ist defined_mbscmp
_UNICODE ist definiertwcscmp
Kein Symbol definiertstrcmp
System_CAPS_ICON_note.jpg Hinweis

Die Symbole _MBCS und _UNICODE schließen sich gegenseitig aus.

Funktionszuordnungen für generischen Text für alle Behandlungsroutinen für Ablaufzeichenfolgen werden in C-Laufzeitbibliotheksverweis erläutert. Siehe insbesondere Internationalisierung.

Entsprechend werden CString-Methoden implementiert, indem "generische" Datentypzuordnungen verwendet werden. Um sowohl Unicode als auch MBCS zu aktivieren, verwendet MFC TCHAR für char, LPTSTR für char* und LPCTSTR für const char*. Diese stellen die richtigen Zuordnungen für Unicode oder MBCS sicher.

Zeichenfolgen
Zeichenfolgenbearbeitung

Anzeigen: