如何将带有UTF-8编码的XML字符串转换为UTF-16?

3
例如,假设我在一个字符串中有以下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个回答

2
我的前几次尝试涉及流、字节数组和许多编码问题。事实证明,.NET中的字符串已经是UTF-16,因此只需要更改xml声明。
答案其实很简单。这里有一个扩展方法,将字符串加载到XmlDocument中,更改声明并获取OuterXml。请参考以下链接:XmlDocumentOuterXml
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接