2017-06-22 26 views
3

StringListにtxtファイルを開こうとしていますが、UTF-8形式を開くと読み込みに失敗します。これはUnicode XE2があるため混乱します。TStringList.LoadFromFile Unicode

簡単なサンプル

Sl := tStringList.Create; 

SL.LoadFromFile(sFilePath); 

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

が、txtファイルはUTF-8ですが、ときにそのANSI形式で正常に動作したときに文字列がロードされません。

+2

LoadFromFileには、オプションのエンコードパラメータがあります。このように試してください:SL.LoadFromFile(sFilePath、TEncoding.UTF8); –

答えて

1

あなたのUTF-8ファイルが、その後、無効なUTF-8バイトの配列を含むUTF-8のファイルをロードし、BOMをていない場合:LoadFromFileに渡された2番目の引数としてエンコーディングを指定することによって、それを行います例外も例外もなく、空の結果が生成されます。これは、Delphiのファイル処理の「機能」です。したがって、この結果が表示され、ファイルに有効なBOMがある場合は、コンテンツを確認してください。

6

TStringList.LoadFromFileは、ファイルのバイトオーダーマーク(BOM)からのエンコードを推測しようとします。 BOMが存在しない場合、ANSIエンコーディングが仮定されます。

あなたのケースでは、BOMが存在しないことは明らかですので、使用するエンコーディングはLoadFromFileと伝える必要があります。

SL.LoadFromFile(sFilePath, TEncoding.UTF8);