2017-06-22 1 views
3

Ich versuche eine TXT-Datei zu einer StringList zu öffnen, aber wenn ich ein UTF-8-Format öffne, kann es nicht geladen werden, das ist verwirrend, weil ich Unicode XE2 habe, fehlt mir hier etwas dummes?TStringList.LoadFromFile Unicode

Simple Sample

Sl := tStringList.Create; 

SL.LoadFromFile(sFilePath); 

For i =0 to SL.Count -1 do 
    foo 

aber der String nicht geladen werden, wenn die txt-Datei UTF-8 ist, aber funktioniert gut, wenn sein in ANSI-Format.

+2

LoadFromFile verfügt über einen optionalen Codierungsparameter. Probieren Sie es wie folgt aus: SL.LoadFromFile (sFilePath, TEncoding.UTF8); –

Antwort

1

Wenn UTF-8-Datei tut eine Stückliste, dann eine UTF-8-Datei geladen wird, die eine ungültige UTF-8-Byte-Sequenz enthält erzeugt ein leeres Ergebnis, ohne Ausnahme oder Hinweis auf den Fehler. Dies ist ein "Feature" der Delphi-Dateibehandlung. Wenn Sie dieses Ergebnis sehen und Ihre Datei eine gültige Stückliste hat, überprüfen Sie den Inhalt.

6

TStringList.LoadFromFile wird versuchen, die Codierung aus der Byte Order Mark (BOM) der Datei abzuleiten. Wenn keine Stückliste vorhanden ist, wird ANSI-Codierung angenommen.

In Ihrem Fall scheint es klar, dass es keine Stückliste gibt, also müssen Sie LoadFromFile mitteilen, welche Codierung zu verwenden ist. Tun Sie das durch die Codierung als das zweite Argument spezifiziert zu LoadFromFile geben:

SL.LoadFromFile(sFilePath, TEncoding.UTF8);