Как я могу сохранить объект из класса 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;