Как форсировать кодировку в XML для UTF-8? - PullRequest
2 голосов
/ 06 марта 2019

Я пытаюсь применить кодировку в xml, который я строю, следующим образом:

XmlWriterSettings       xmlSetting = new XmlWriterSettings();
XmlWriter               xmlWriter;
Str                     res;


xmlSetting.encoding ('UTF-8');
xmlWriter = XmlWriter::newXml(xmlSetting);    
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement('root');
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
xmlWriter.flush();
res = xmlWriter.writeToString();    
info(res);

Но результат этого в моей системе:

<?xml version="1.0" encoding="utf-16"?><root />

Каков правильный способ принудительного кодирования в UTF-8 и возможно ли это

Документация не содержит примеров: https://docs.microsoft.com/en-us/previous-versions/dynamics/ax-2012/system-classes/gg929065(v%3dax.60)

1 Ответ

6 голосов
/ 06 марта 2019

Если вы пишете в строку, то кодировка будет переопределена UTF-16.Строки всегда Unicode, то есть UTF-16.Не существует способа написать любую другую кодировку, используя метод writeToString.Если вы пишете в файл, то ваша кодировка вступит в силу.

XmlWriterSettings       xmlSetting = new XmlWriterSettings();
XmlWriter               xmlWriter;
Str                     res;


xmlSetting.encoding ('UTF-8');

xmlWriter = XMLWriter::newFile(@"C:\TEMP\test.xml", xmlSetting);    
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement('root');
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
xmlWriter.flush();

enter image description here

...