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