例如,假设我在字符串中有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<Stuff />
如果我尝试将其插入带有Xml列的SQL Server 2005数据库表中,我将收到以下错误(我使用的是EF 4.1,但我认为不重要):
XML解析:第1行,第38个字符,无法切换编码
在做了一些研究后,我了解到SQL Server希望xml是UTF-16。我如何转换它?
答案 0 :(得分:2)
我的前几次尝试涉及流,字节数组和许多编码问题。事实证明.NET中的字符串已经是UTF-16,所以只需要更改xml声明。
答案其实很简单。这是一个扩展方法,它将字符串加载到XmlDocument,更改声明,并抓取OuterXml。
public static class XmlDocumentExtensions
{
public static string ToEncoding(this XmlDocument document, Encoding encoding)
{
if (document.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
{
XmlDeclaration xmlDeclaration = (XmlDeclaration)document.FirstChild;
if (String.Compare(xmlDeclaration.Encoding, encoding.WebName, StringComparison.OrdinalIgnoreCase) != 0)
{
xmlDeclaration.Encoding = encoding.WebName;
return document.OuterXml;
}
}
return document.OuterXml;
}
}
您可以像这样使用它:
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
xml = document.ToEncoding(Encoding.Unicode);