我正在使用Delphi XE3。

在我的代码中,我将需要创建一个文件流,然后将自己的数据以及几个TStringList的内容写入其中。该文件为UTF-16LE格式。

因此,我的代码:

FileStream := TFileStream.Create('D:\MyFile.dat', fmCreate or fmOpenWrite or fmShareExclusive);

try
  // Write some data to FileStream

  // Write contents of StringList1 into FileStream
  StringList1.SaveToStream(FileStream, TEncoding.Unicode);

  // Write some more data to FileStream

  // Write contents of StringList2 into FileSteram
  StringList2.SaveToStream(FileStream, TEncoding.Unicode);
finally
  FileStream.Free;
end;


执行代码后,每次调用StringList1.SaveToStream(FileStream,TEncoding.Unicode)时,我都会发现问题。它将写入BOM(0xFFFE),然后在字符串列表中紧跟实际字符串。

因此,我得到这样的Unicode文件:

0xFFFE(第一个由我自己编写)

(一些数据)

0xFFFE(StringList1的内容)

(一些数据)

0xFFFE(StringList2内容)

但这不是我期望的,因为文件开头应该只有一个0xFFFE。因此,我只是想知道如何防止StringList1.SaveToStream在写入实际的字符串列表之前写入0xFFFE BOM?

最佳答案

我为我的问题找到了另一种解决方案。

TStrings具有WriteBOM属性,该属性将控制使用SaveToStream或SaveToFile时是写出BOM表。

因此,使用以下代码将禁用BOM:

  StringList1.WriteBOM := False;
  StringList1.SaveToStream(FileStream, TEncoding.Unicode);

08-05 07:16