Comment gérer la spécification de page de code AnsiString Delphi dans C++

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des fonctionnalités Delphi dans C++Builder - Index


L'implémentation C++ du type AnsiString fournit la prise en charge de Page de code similaire à celui disponible dans Delphi. Toutefois, tandis que la version Delphi est implémentée via une extension au langage, la version C++ est implémentée via un template avec un paramètre non-type comme codepage, comme dans :

template AnsiStringT<unsigned short codePage>

Par conséquent, le type auparavant connu en tant que type AnsiString est à présent simplement un typedef du nouveau template AnsiStringT, comme dans :

 typedef AnsiStringT<65001> UTF8String;

 typedef AnsiStringT<65535> RawByteString;

Vous pouvez déclarer d'autres spécialisations de AnsiStringT avec la page de code requise.

Toutes les assignations à une instance de AnsiStringT encodera les données dans la page de code du type. Par exemple, dans le code suivant, les données Unicode assignées à la variable UTF8String sont automatiquement encodées en UTF8 :

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

La variable utfs peut être passée à une fonction attendant un UnicodeString et les données d'origine seront restaurées sans perte encourue :

Button1->Caption = utfs; // Définir le libellé du bouton sur "СЛАДКОЕ";

Pendant que AnsiStringT gère la prise en charge de codepage dans l'ombre, vous pouvez toujours définir explicitement la page de code d'une instance en appelant la méthode suivante :

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

Cette méthode doit être utilisée avec précaution car elle pourrait induire en erreur les utilisateurs de l'instance qui s'attendent à ce que le type contienne des données encodées dans sa page de code par défaut.

Remarque : Le DefaultSystemCodePage vaut 0.

Voir aussi