当我将对象从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的情况下保存文件?
答案 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>