lev*_*ser 5 delphi tstringlist delphi-xe2
我试图将一个txt文件打开到StringList但是如果我打开一个UTF-8格式它无法加载,这很令人困惑,因为我有Unicode XE2,我在这里错过了一些愚蠢的东西吗?
简单样本
Sl := tStringList.Create;
SL.LoadFromFile(sFilePath);
For i =0 to SL.Count -1 do
foo
Run Code Online (Sandbox Code Playgroud)
但是当txt文件是UTF-8时,String不会加载,但在ANSI格式时它可以正常工作.
TStringList.LoadFromFile将尝试从文件的字节顺序标记(BOM)推断编码.如果没有BOM,则假定为ANSI编码.
在您的情况下,似乎很清楚没有BOM,因此您必须告诉LoadFromFile使用哪种编码.通过将编码指定为传递给的第二个参数来执行此操作LoadFromFile:
SL.LoadFromFile(sFilePath, TEncoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
如果您的 UTF-8 文件确实有 BOM,则加载包含无效 UTF-8 字节序列的 UTF-8 文件将产生空结果,没有任何异常或失败指示。这是 Delphi 文件处理的一个“功能”。因此,如果您看到此结果并且您的文件具有有效的 BOM,请检查内容。