【发布时间】:2014-02-24 09:41:03
【问题描述】:
我有一个 XML 字符串(utf-8)。我需要将字符串存储在数据库中(MS SQL)。编码字符串必须是 UTF-16。
这段代码不行,utf16Xml是空的
XDocument xDoc = XDocument.Parse(utf8Xml);
xDoc.Declaration.Encoding = "utf-16";
StringWriter writer = new StringWriter();
XmlWriter xml = XmlWriter.Create(writer, new XmlWriterSettings()
{ Encoding = writer.Encoding, Indent = true });
xDoc.WriteTo(xml);
string utf16Xml = writer.ToString();
utf8Xml - 字符串包含一个序列化对象(编码 UTF8)。
如何将xml字符串UTF8转为UTF16?
【问题讨论】:
-
在上面的代码中,
utf8Xml变量的类型似乎是string。但是,如果它不在 .NETstring编码中(如果您想知道,.NET 在内部使用 UTF-16),那将是一个病态的字符串。utf8Xml字符串从何而来?它是什么样子的?我认为问题在于我们看到的代码“之前”。 -
utf8Xml - 字符串包含一个序列化对象(编码 UTF8)。我与服务编码的 UTF8 交换数据
-
XDocument.Parse()只接受strings,在实现中是UTF-16。要么你在创建string时已经变成了UTF-16,否则Parse将无法工作。 -
在 .NET 中,
System.String是 UTF-16 代码单元的序列。通常,一个代码单元(一个System.Char值)对应一个字符(但是平面0 外的每个字符需要两个代码单元,即所谓的代理对)。您的utf8Xml变量似乎是System.String。然后根据定义,它不是 UTF-8。可能是字符串utf8Xml是从某些 UTF-8 源错误构造的。那么解决方案就是回头看看是怎么发生的,然后修复它。
标签: c# sql-server xml utf-8 utf-16