Как я могу сохранить объект из класса TStringList в файл (Delphi XE 2) с UTF8 без спецификации?

Когда я сохраняю объект из содержимого файла класса TStringList в файл, файл сохраняется с UTF-8 правильно, но по умолчанию с UTF-8 с спецификацией.

Мой код:

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

В этом примере файл "myfile.dat" отображается в кодировке "UTF-8 BOM".

Как я могу сохранить файл без спецификации?

2 ответа

Решение

Вы просто должны установить свойство TStrings.WriteBOM в false,

Документация говорит нам об этом:

Будет вызывать SaveToStream или SaveToFile для записи спецификации.

Установите для WriteBOM значение True, чтобы SaveToStream записывал спецификацию (метку порядка байтов) в поток, а SaveToFile записывал спецификацию в файл.

Вы можете добиться этого, создав собственный класс кодирования, происходящий от TUTF8Encoding и переопределяя GetPreamble метод:-

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

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

Другие вопросы по тегам