Принудительное отсутствие спецификации при сохранении XML
Я сохраняю XML-файл, который используется внешним инструментом.
Инструмент, к сожалению, не понимает кодировку BOM (Byte Order Mark: EF BB BF
) в начале файла:
<?xml version="1.0" encoding="UTF-8"?>
...
00000000h: EF BB BF 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E <?xml version
00000010h: 3D 22 31 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D ="1.0" encoding=
00000020h: 22 55 54 46 2D 38 22 3F 3E ... "UTF-8"?>
Мой код:
XmlDocument doc = new XmlDocument();
// Stuff...
using (TextWriter sw = new StreamWriter(file, false, Encoding.UTF8)) {
doc.Save(sw);
}
Вопрос:
Как заставить TextWriter не писать спецификацию?
1 ответ:
Вы можете создать
UTF8Encoding
экземпляр, который не использует спецификацию, вместо использованияEncoding.UTF8
.using (TextWriter sw = new StreamWriter(file, false, new UTF8Encoding(false))) { doc.Save(sw); }
Вы можете сохранить это в статическом поле, если вас беспокоит стоимость повторного создания экземпляра:
private static readonly Encoding UTF8NoByteOrderMark = new UTF8Encoding(false); ... using (TextWriter sw = new StreamWriter(file, false, UTF8NoByteOrderMark)) { doc.Save(sw); }