如何解码UCS-2编码的XML?

时间:2013-09-18 09:05:10

标签: c# xml sql-server-2008

Sql Query在xml -

之后返回
 <Table>
    <date>2014-01-15</date>
    <Life_x0020__x0026__x0020_Zeal>3</Life_x0020__x0026__x0020_Zeal>
    <Total>3</Total>
  </Table>

此处表格中的列名称为Life & Zeal,但xml显示为Life_x0020__x0026__x0020_Zeal

我提到了MSDN,发现它是一个UCS-2编码。我正在从C#代码中读取此xml,我希望它能够解码回Life & Zeal

怎么做?

注意 - 我正在使用Sql Server 2008FOR XML PATH命令来生成此xml

3 个答案:

答案 0 :(得分:2)

这与UCS2无关。

正如Kami所指出的那样,具有非法字符(对于XML节点名称)的列名称将使用其Unicode代码点等效项进行转换,因此从技术上讲,您无法执行您想要执行的操作。

我建议您在SELECT声明中添加别名

SELECT [Life & Zeal] AS LifeAndZeal

避免使用XML中的这些字符。

答案 1 :(得分:1)

在XML中,节点名称中不可能包含SpaceAmpersand个字符。我希望这就是他们在输出中被改变的原因。

无法更改代码以显示这些值。但是,您应该能够更改SQL以在输出中重命名它。

答案 2 :(得分:1)

更改编码的最简单方法是从XML文件(或流)中读取

using(XmlReader r = XmlReader.Create(new StreamReader(
                        fileName, Encoding.GetEncoding("UCS-2"))))
{
    while(r.Read())
    {
        Console.WriteLine(r.Value);
    }
}