2017-06-22 121 views
3

我试图打开一个txt文件到一个StringList,但如果我打开一个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文件确实有一个BOM,然后加载UTF-8文件,其中包含一个无效的UTF-8字节序列将产生一个空的结果,没有例外或指示失败。这是Delphi文件处理的一个“特征”。所以,如果你看到这个结果,并且你的文件有一个有效的BOM,请检查内容。

6

TStringList.LoadFromFile将尝试从文件的字节顺序标记(BOM)推断编码。如果不存在BOM,则假定ANSI编码。

在你的情况下,似乎很清楚没有BOM,所以你必须告诉LoadFromFile使用哪种编码。做到这一点通过指定编码作为第二个参数传递给LoadFromFile

SL.LoadFromFile(sFilePath, TEncoding.UTF8);