如何将没有BOM的UTF8中的TStringList类对象保存到文件(Delphi XE 2)?

时间:2015-08-28 15:33:23

标签: delphi utf-8 tstringlist

当我将对象从TStringList类文件内容保存到文件时,该文件默认使用UTF-8保存,但默认使用带有BOM的UTF-8。

我的代码是:

myFile := TStringList.Create;
try
  myFile.Text := myData;
  myFile.saveToFile('myfile.dat', TEncoding.UTF8)
finally
  FreeAndNil(myFile);
end;

在示例中,文件“myfile.dat”显示为“UTF-8 BOM”编码。

如何在没有BOM的情况下保存文件?

2 个答案:

答案 0 :(得分:10)

您可以通过创建自己的编码类来实现此目的,该编码类来自TUTF8Encoding并覆盖GetPreamble方法: -

type
  TUTF8EncodingNoBOM = class(TUTF8Encoding)
  public
    function GetPreamble: TBytes; override;
  end;

function TUTF8EncodingNoBOM.GetPreamble: TBytes; begin SetLength(Result, 0); end;

答案 1 :(得分:9)

您只需将属性TStrings.WriteBOM设置为false

文档告诉我们:

  

将导致SaveToStream或SaveToFile编写BOM。

     

WriteBOM 设置为 True ,以使SaveToStream将BOM(字节顺序标记)写入流,并使SaveToFile将BOM写入文件。< / p>