Behandlung der AnsiString-Codeseitenspezifikation in C++
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.