2016-06-22 1 views
4

Je travaille avec TStringList avec TMemeorySteam beaucoup dans mon projet.Delphi - TStringList Enregistrer/Charger pour coder en continu

msTmp := TMemoryStream.Create; 
    try 
    lTemp.SaveToStream(msTmp, TEncoding.Unicode); 
    finally 
    msTmp.Free; 
    end; 
    ..... 
    lTemp := TStringList.Create; 
    try 
    lTemp.LoadFromFile(msTmp, TEncoding.Unicode); 
    finally 
    lTemp.Free; 
    end; 

Comment puis-je dire LoadFromStream() et SaveToStream() que le flux est UTF-16 codé par défaut dans mon projet sans inclure le type encodées dans chaque appel. donc je peux appeler LoadFromStream(msTmp) seulement et il va charger avec codé UTF-16.

Répondre

6

Jetez un coup d'œil à la propriété TStrings.DefaultEncoding.

L'encodage par défaut de l'objet actuel.

defaultEncoding est utilisé lorsque le codage zéro est spécifié dans un appel à LoadFromStream ou SaveToStream.

Par défaut, DefaultEncoding est défini sur Default. L'utilisateur peut modifier DefaultEncoding si un autre codage par défaut est souhaité pour LoadFromStream ou SaveToStream.

Cependant, attention à la propriété TStrings.Encoding:

Le codage des caractères déterminé lors de la lecture d'un flux ou un fichier.

Encoding est une propriété en lecture seule qui contient la valeur du codage de caractères détecté lorsque les méthodes LoadFromStream ou LoadFromFile sont appelées. Si un fichier ou un flux ne contient pas de nomenclature (la valeur de codage ne peut pas être détectée), Encoding est défini sur la valeur spécifiée dans la propriété DefaultEncoding.

Encoding est utilisé dans les méthodes SaveToStream et SaveToFile.

Si le paramètre Encoding [de LoadFromStream] n'est pas donné, alors les chaînes sont chargées en utilisant le codage approprié. La valeur du codage est obtenue en appelant la routine GetBufferEncoding de la classe TEncoding. LoadFromStream enregistre ensuite la valeur de l'encodage dans la propriété Encoding, à utiliser si le flux est enregistré.

Donc, tant que vous n'appelez LoadFrom...(), vous pouvez définir DefaultEncoding-TEncoding.Unicode puis appeler SaveTo...() sans spécifier une valeur pour le paramètre Encoding. Mais, une fois que vous appelez LoadFrom...(), la propriété Encoding est prioritaire sur la propriété DefaultEncoding pour les appels suivants SaveTo...().Tant que les fichiers ne sont pas BOM'ed, la propriété Encoding correspondra à la propriété DefaultEncoding. Mais si une nomenclature non-UTF16LE est rencontrée, tous les paris sont désactivés.

Pour assurer TEncoding.Unicode est toujours utilisé, vous devez continuer à utiliser le paramètre Encoding de LoadFrom...() et SaveTo...(), c'est pourquoi ils existent. Ils prennent la première priorité, les propriétés (Default)Encoding sont des solutions de repli lorsque les encodages d'entrée/sortie ne sont pas explicitement indiqués.