首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlWriter编码问题

XmlWriter编码问题
EN

Stack Overflow用户
提问于 2009-05-14 13:50:59
回答 4查看 10.7K关注 0票数 6

我有以下代码:

代码语言:javascript
复制
    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‘的第一个字符是this (char #239),这使得它对于一些xml解析器是无效的:这是从哪里来的?我到底做错了什么?

我知道我可以通过从第一个字符开始就解决这个问题,但我宁愿知道它为什么会出现在那里,而不是简单地修补问题。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-14 14:01:57

在这里找到了一个解决方案:https://timvw.be/2007/01/08/generating-utf-8-with-systemxmlxmlwriter/

我在顶端错过了这个:

代码语言:javascript
复制
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UTF8Encoding(false);
MemoryStream ms = new MemoryStream();
XmlWriter w = XmlWriter.Create(ms, xmlWriterSettings);

感谢大家的帮助!

票数 13
EN

Stack Overflow用户

发布于 2009-05-14 13:56:40

问题是,编写器生成的XML是UTF-16,而您使用UTF-8将其转换为字符串。试着这样做:

代码语言:javascript
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2009-05-14 13:54:39

您可以像这样更改编码:

代码语言:javascript
复制
w.Settings.Encoding = Encoding.UTF8;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/863437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档