Behandlung der AnsiString-Codeseitenspezifikation in C++

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Behandlung von Delphi-Features in C++Builder - Index


Die C++-Implementierung des Typs AnsiString stellt eine CodePage-Unterstützung bereit, die der von Delphi sehr ähnlich ist. Die Delphi-Version ist über eine Spracherweiterung implementiert, die C++-Version dagegen über eine Template mit einem Nicht-Typparameter als codepage, wie in:

template AnsiStringT<unsigned short codePage>

Deshalb ist der frühere Typ AnsiString jetzt einfach eine Typdefinition (typedef) der neuen AnsiStringT-Template, wie in:

 typedef AnsiStringT<65001> UTF8String;

 typedef AnsiStringT<65535> RawByteString;

Sie können andere Spezifikationen von AnsiStringT mit der gewünschten Codeseite deklarieren.

Alle Zuweisungen zu einer AnsiStringT-Instanz codieren die Daten in der Codeseite des jeweiligen Typs. Hier ein Beispiel: Im folgenden Quelltext werden die Unicode-Daten, die der Variablen UTF8String zugewiesen werden, automatisch in UTF8 codiert:

const wchar_t* data = L"СЛАДКОЕ";
UTF8String utfs(data);

Die Variable utfs kann an eine Funktion übergeben werden, die einen UnicodeString erwartet, und die Originaldaten werden ohne Datenverlust wiederhergestellt:

Button1->Caption = utfs; // Beschriftung der Schaltfläche auf "СЛАДКОЕ" setzen;

Beachten Sie bitte, dass AnsiStringT die codepage-Unterstützung zwar im Hintergrund verarbeitet, Sie aber dennoch durch Aufruf der folgenden Methode die Codeseite einer Instanz explizit setzen können:

AnsiStringT<CP>::SetCodePage(unsigned short codePage, bool convert=true)

Diese Methode sollte aber mit Bedacht verwendet werden, weil Benutzer der Instanz irregeführt werden könnten, da sie erwarten, dass der Typ in ihrer Standardcodeseite codierte Daten enthält.

Hinweis: Die DefaultSystemCodePage ist 0.

Siehe auch