gpt4 book ai didi

c# - 保存 XmlDocument 时,它会忽略 XmlDeclaration (UTF8) 中的编码并使用 UTF16

转载 作者:IT王子 更新时间:2023-10-29 04:30:18 25 4
gpt4 key购买 nike

我有以下代码:

var doc = new XmlDocument();

XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(xmlDeclaration);

XmlElement root = doc.CreateElement("myRoot");
doc.AppendChild(root);
root.InnerText = "myInnerText";

StringWriter sw = new StringWriter();
doc.Save(sw);
Console.WriteLine(sw.ToString());

Console.WriteLine();

MemoryStream ms = new MemoryStream();
doc.Save(ms);
Console.WriteLine(Encoding.ASCII.GetString(ms.ToArray()));

这是输出:

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

???<?xml version="1.0" encoding="UTF-8"?>
<myRoot>myInnerText</myRoot>

基本上它所做的是制作一个 xml 文件,并将编码设置为 utf8,但是当它把它保存到 stringwriter 时,它会忽略我的编码并使用 utf16。但是,当使用内存流时,它使用 utf8(带有额外的 BOM 字符)

这是为什么?为什么它不遵守我的 utf-8 显式编码设置?

非常感谢

最佳答案

因为您所做的只是设置一个表示它是 UTF-8 的 XML 元素,所以您实际上并没有将其保存为 UTF-8。您需要将输出流设置为使用 UTF-8,如下所示:

var doc = new XmlDocument();
XmlElement root = doc.CreateElement("myRoot");
doc.AppendChild(root);
root.InnerText = "myInnerText";
using(TextWriter sw = new StreamWriter("C:\\output.txt", false, Encoding.UTF8)) //Set encoding
{
doc.Save(sw);
}

完成后,您甚至不必添加 XML 声明。它自己想出来。如果要将其保存到 MemoryStream,请使用包装 MemoryStream 的 StreamWriter。

关于c# - 保存 XmlDocument 时,它会忽略 XmlDeclaration (UTF8) 中的编码并使用 UTF16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com