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 и не знаю с какой версии это работает.
Самый простой способ писать текст из 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 и не знаю с какой версии это работает.
Спасибо, то, что надо)
ОтветитьУдалитьСпасибо огромное!!!! В ХЕ3 работает
ОтветитьУдалитьВ ХЕ работает
ОтветитьУдалитьВ XE8 тоже :)
ОтветитьУдалитьВ Delphi 2010 увы нет такого свойства.
ОтветитьУдалитьВ Seattle гуд...
ОтветитьУдалитьв XE тоже уже было
ОтветитьУдалитьИ от меня спасибо. То что нужно.
ОтветитьУдалить