如何使用UTF-8编码UTF-16转换xml字符串?

时间:2012-01-19 16:09:43

标签: .net xml character-encoding

例如,假设我在字符串中有以下xml:

<?xml version="1.0" encoding="UTF-8"?>
<Stuff />

如果我尝试将其插入带有Xml列的SQL Server 2005数据库表中,我将收到以下错误(我使用的是EF 4.1,但我认为不重要):

  

XML解析:第1行,第38个字符,无法切换编码

在做了一些研究后,我了解到SQL Server希望xml是UTF-16。我如何转换它?

1 个答案:

答案 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);