Utilisation de TEncoding pour les fichiers Unicode
Remonter à VCL
Delphi et C++Builder ont migré vers Unicode en tant que type de chaîne par défaut à partir de la version 2009 du produit.
Lecture et écriture à l'ancien format
De nombreuses applications Delphi ont toujours besoin d'interagir avec d'autres applications ou sources de données, beaucoup d'entre elles peuvent seulement gérer les données au format ANSI ou ASCII. Pour cette raison, les valeurs par défaut des méthodes TStrings écrivent les fichiers encodés en ANSI (selon la page de code active) et lisent les fichiers selon que le fichier contient ou ne contient pas un BOM (Byte Order Mark)
Si un BOM est trouvé, une méthode TStrings lit les données encodées comme l'indique le BOM. Si aucun BOM n'est trouvé, une méthode TStrings lit les données en ANSI et les convertit selon la page de code active en cours.
Tous vos fichiers écrits avec des versions de Delphi antérieures à RAD Studio 2009 sont toujours lisibles, à condition d'utiliser la même page de code active pour la lecture et l'écriture. De même, tout fichier écrit avec RAD Studio 2009 ayant un encodage ASCII devrait être lisible par toute version antérieure à RAD Studio 2009.
Tout fichier écrit avec RAD Studio 2009 utilisant un autre encodage génère un BOM et ne sera pas lisible par une version antérieure à RAD Studio 2009. A ce stade, seuls les formats BOM les plus répandus sont détectés (UTF16 Little-Endian, UTF16 Big-Endian et UTF8).
Utilisation des nouveaux encodages
Vous souhaiterez probablement lire et écrire les données texte par le biais de la classe TStrings au format Unicode, que ce soit Little-Endian UTF16, Big-Endian UTF16, UTF8, UTF7, et ainsi de suite. La classe TEncoding est très similaire du point de vue des méthodes et des fonctionnalités à la classe System.Text.Encoding du .NET Framework.
var S: TStrings; begin S := TStringList.Create(); { ... } S.SaveToFile('config.txt', TEncoding.UTF8);
Sans le paramètre TEncoding.UTF8 supplémentaire, 'config.txt' serait simplement converti et écrit en encodage ANSI selon la page de code active en cours. Vous n'avez pas besoin de changer le code de lecture, car TStrings détecte automatiquement l'encodage selon le BOM et agit en conséquence.
Si vous voulez forcer la lecture et l'écriture du fichier avec une page de code spécifique, vous pouvez créer une instance de TMBCSEncoding et passer la page de code à utiliser dans le constructeur. Utilisez ensuite cette instance pour lire et écrire le fichier, car la page de code spécifique peut ne pas correspondre à la page de code active de l'utilisateur.
La même chose est vraie pour ces classes, les données sont lues et écrites en tant que données ANSI. Puisque les fichiers INI ont toujours été traditionnellement encodés en ANSI (ASCII), cela peut n'avoir aucun sens de les convertir, selon les besoins de votre application. Si vous voulez utiliser un format Unicode, nous vous offrons un moyen d'utiliser les classes TEncoding pour ce faire.
Dans tous les cas ci-dessus, le stockage interne est Unicode et toute manipulation de données effectuée avec des chaînes devrait continuer à fonctionner comme prévu. Les conversions ont lieu automatiquement lors de la lecture et de l'écriture des données.
Voici la liste des identificateurs de pages de codes (MSDN).
Voici la liste des méthodes de surcharge qui acceptent un paramètre TEncoding :
- WriteNode (Outline.TOutlineNode)
- LoadFromFile (Outline.TOutlineNode)
- LoadFromStream (Outline.TOutlineNode)
- SaveToFile (Outline.TOutlineNode)
- SaveToStream (Outline.TOutlineNode)
- LoadFromFile (Classes.TStrings)
- LoadFromStream (Classes.TStrings)
- SaveToFile (Classes.TStrings)
- SaveToStream (Classes.TStrings)
- Create (Classes.TStringStream)
- Create (Classes.TStreamReader)
- Create (Classes.TStreamWriter)