如何将XML编码强制为UTF-8?

bou*_*ekv 2 xml encoding axapta dynamics-ax-2012-r3

我正在尝试通过以下方式在构建的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);
Run Code Online (Sandbox Code Playgroud)

但是,这在我的系统中的结果是:

<?xml version="1.0" encoding="utf-16"?><root />
Run Code Online (Sandbox Code Playgroud)

将编码强制为UTF-8的正确方法是什么?

文档未提供示例:https : //docs.microsoft.com/zh-cn/previous-versions/dynamics/ax-2012/system-classes/gg929065(v%3dax.60)

小智 7

如果您要写入字符串,则编码将被UTF-16覆盖。字符串始终是Unicode,即UTF-16。无法使用writeToStringmethod 编写任何其他编码。如果写入文件,则编码将生效。

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();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明