Comment gérer la spécification de page de code AnsiString Object Pascal dans C++
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.