TStringStream sur un Delphi Unicode ?
Memory pointe sur une zone mémoire dont l'encodage varie selon TEncoding (par défaut ANSI en Windows, UTF8 en Linux)
j'ai lu au début
" pour le multiplateforme " donc attention aux effets de bord de fonction fait les conversion via TEncoding
Et le Read du TStringStream, hérité du TMemoryStream, qui contiendrait du UTF8 en brut, ça lit la donnée brute
Par contre ReadString lui converti la donnée brute en fonction du TEncoding vers une UnicodeString.
La fonction standard
IsUTF8String fonctionne sur une RawByteString, dommage comme celle de Paul, PByte ou PAnsiChar aurait été plus ouvert (surtout le la première chose faite par la fonction c'est d'obtenir le pointeur sur la chaine s passée en paramètre)
Pour la passage en TStringList, je te recommande :
1 2 3 4
| if DetectUTF8(MyStringStream.Memory, MyStringStream.size) then
MyStringList.LoadFromStream(MyStringStream, TEncoding.UTF8)
else
MyStringList.LoadFromStream(MyStringStream, TEncoding.ANSI) |
D'ailleurs MyStringStream pourait être un TMemoryStream seulement pour la lecture FTP pour éviter tout tentation d'utilisé le mode String du TStringStream.
Partager