среда, 4 июля 2012 г.

Delphi: сохраняем файлы в UTF-8 без BOM

Взялся вновь за программирование на Delphi. Установив Delphi XE2, я принялся искать способ писать файлы с кодировкой UTF-8.

Самый простой способ писать текст из TStrings в файл в кодировке UTF-8:

var MyStrings: TStrings;
...
MyStrings.SaveToFile('C:\MyUtf8File.txt', TEncoding.UTF8);

Однако такое использование этой функции приводит к сохранению текста с отметкой порядка байтов (Byte-Order Mark — BOM). Это может привести к несовместимости с некоторыми другими программами, например, при использовании в веб-разработке.

К счастью, не пришлось изобретать велосипед. Проведя исследования функции TStrings.SaveToFile, я обнаружил, что существует такое свойство, как TStrings.WriteBOM! Устанавливаем его в False и всё! В итоге получаем код:

MyStrings.WriteBOM := False;

MyStrings.SaveToFile('C:\MyUtf8File.txt', TEncoding.UTF8);


P.S.: Проверял только Delphi XE2 и не знаю с какой версии это работает.

6 комментариев: