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

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Gestion des fonctionnalités Object Pascal dans Appmethod C++ - Index

L'implémentation C++ du type AnsiString fournit le support Page de code similaire à celui disponible dans Object Pascal. Toutefois, tandis que la version Object Pascal 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 affectations à 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 affecté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 le support 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