我有以下代码:
MemoryStream ms = new MemoryStream();
XmlWriter w = XmlWriter.Create(ms);
w.WriteStartDocument(true);
w.WriteStartElement("data");
w.WriteElementString("child", "myvalue");
w.WriteEndElement();//data
w.Close();
ms.Close();
string test = UTF8Encoding.UTF8.GetString(ms.ToArray());
XML正确生成;但是,我的问题是字符串'test'的第一个字符是ï(字符#239),使其对某些xml解析器无效:这是哪里来的?我到底在做什么错?
[我知道我可以通过在第一个字符之后开始来解决问题,但我宁愿知道为什么会在那里,而不是简单地解决问题。
谢谢!
在这里找到一个解决方案:https://timvw.be/2007/01/08/generating-utf-8-with-systemxmlxmlwriter/
我在顶部缺少此位置:
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UTF8Encoding(false);
MemoryStream ms = new MemoryStream();
XmlWriter w = XmlWriter.Create(ms, xmlWriterSettings);
感谢大家的帮助!
问题是,当您使用UTF-8将其转换为字符串时,编写器生成的XML为UTF-16。请尝试以下方法:
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter(sb))
using (XmlWriter w = XmlWriter.Create(writer))
{
w.WriteStartDocument(true);
w.WriteStartElement("data");
w.WriteElementString("child", "myvalue");
w.WriteEndElement();//data
}
string test = sb.ToString();
您可以像这样更改编码:
w.Settings.Encoding = Encoding.UTF8;
如果您关心编辑器使用的字节顺序标记(例如Visual Studio检测到UTF8编码的XML和正确突出显示语法),所有这些都会略有不同。
这里是解决方法:
MemoryStream stream = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
settings.IndentChars = "\t";
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
// ... write
// Make sure you flush or you only get half the text
writer.Flush();
// Use a StreamReader to get the byte order correct
StreamReader reader = new StreamReader(stream,Encoding.UTF8,true);
stream.Seek(0, SeekOrigin.Begin);
result = reader.ReadToEnd();
}
我有2个完整的here代码段>