c# - 将 utf-8 XML 文档转换为 utf-16 以插入到 SQL 中

标签 c# xml encoding

我有一个使用 utf-8 编码创建的 XML 文档。我想将该文档存储在 sql 2008 xml 列中,但我知道我需要将其转换为 utf-16 才能执行此操作。

我已经尝试使用 XDocument 来执行此操作,但在转换后我没有获得有效的 XML 结果。这是我尝试进行转换的内容(Utf8StringWriter 是一个继承自 StringWriter 并重载 Encoding 的小类):

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 类)从现有对象模型(引擎)创建 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 调试器查看它,我注意到整个字符串不存在,而是我得到一个string literal was not closed XML 查看器错误。

最佳答案

错误在第一行 XDocument xDoc = XDocument.Parse(utf8Xml);。很可能您将 utf8 流转换为字符串 (utf8xml),但字符串中指定的编码仍然是 utf-8,因此 XML 读取器失败。如果为真,则使用 Load 直接从流中加载 XML而不是先将其转换为字符串。

关于c# - 将 utf-8 XML 文档转换为 utf-16 以插入到 SQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890450/

相关文章:

c# - 如何在 Wheelcollider 位置 Unity 制作 Wheel Mesh Renderer

c# - 使用 SqlCommand 返回值

java - 以 XML 形式提取数据库表

c++ - 使用 TinyXML 修改文档

c# - 使用 .NET C# MySQL 插入表情符号

c# - 将段落内的超链接绑定(bind)到命令 (MVVM)

C# 无法读取数据集中的 xml

c - 稀疏 vector 的高效编码算法

encoding - 对 xhtml5 : no more `<?xml?>` and now mandatory `meta` ? 感到困惑

使用 IKVM 的 C# 库在 IKVM.OpenJDK.ClassLibrary 和 IKVM.OpenJDK.Core 之间存在命名空间歧义