【发布时间】:2012-06-05 01:23:54
【问题描述】:
我有一个使用 utf-8 编码创建的 XML 文档。我想将该文档存储在 sql 2008 xml 列中,但我知道我需要将其转换为 utf-16 才能做到这一点。
我尝试使用 XDocument 来执行此操作,但在转换后我没有得到有效的 XML 结果。这是我尝试进行的转换(Utf8StringWriter 是一个继承自 StringWriter 并重载编码的小类):
XDocument xDoc = XDocument.Parse(utf8Xml);
StringWriter writer = new StringWriter();
XmlWriter xml = XmlWriter.Create(writer, new XmlWriterSettings()
{ Encoding = writer.Encoding, Indent = true });
xDoc.WriteTo(xml);
string utf16Xml = writer.ToString();
utf16Xml 中的数据无效,尝试插入数据库时出现错误:
{"XML parsing: line 1, character 38, unable to switch the encoding"}
然而,最初的 utf8Xml 数据绝对是有效的,并且包含了我需要的所有信息。
更新: 初始 XML 是通过使用 XMLSerializer(带有 Utf8StringWriter 类)从现有对象模型(engine)创建 xml 字符串来获得的。代码如下:
public static void Serialise<T>(T engine, ref StringWriter writer)
{
XmlWriter xml = XmlWriter.Create(writer, new XmlWriterSettings() { Encoding = writer.Encoding });
XmlSerializer xs = new XmlSerializer(engine.GetType());
xs.Serialize(xml, engine);
}
我必须这样离开,因为我无法控制更改代码。
在我什至将 utf16Xml 字符串发送到失败的数据库调用之前,我可以通过 Visual Studio 调试器查看它,我注意到整个字符串不存在,而是我得到一个 字符串文字没有关闭 XML 查看器出错。
【问题讨论】: