代码之家  ›  专栏  ›  技术社区  ›  AcidRaZor

为什么xmltextreader会自动将html编码的utf8字符转换为utf8字符串?

  •  3
  • AcidRaZor  · 技术社区  · 14 年前

    我收到一个编码为“ISO-8859-1”(拉丁语-1)的XML文件

    在文件中(在其他标签中)我有 <OtherText>Example &quot;content&quot; And &#9472;</OtherText>

    现在由于某种原因,当我将其加载到XMLTextReader并执行“XmlReader.Value”返回值时,它返回:“content”和─

    • 转换为字节并使用 编码。从UTF-8转换为更改 给了我一堆“?”)
    • StreamReader(文件,编码。 无论什么 将文件加载到XmlTextReader

    在互联网上和自己身上有许多不同的方法。

    我知道.NET字符串是UTF-16,但我不明白的是,为什么一个完全拉丁-1格式的XML文件,在存在UTF-8字符时有正确的标记,它与旧的数据库和web(用于HTML标记等)兼容,它只会覆盖它,并且输出是UTF-8编码的字符串。

    除了编写自己的自定义文本解析器之外,还有其他方法可以解决这个问题吗???

    1 回复  |  直到 14 年前
        1
  •  3
  •   ParmesanCodice    14 年前

    我不认为这是编码的问题。您看到的是XML字符串正在取消转义。

    问题是 &quot; 是XML转义字符,因此XMLTextReader将为您取消转义。

    <OtherText>Example &quot;content&quot; And &#9472;</OtherText>
    

    对此:

    <OtherText>Example &amp;quot;content&amp;quot; And &amp;#9472;</OtherText>
    

    那么

       XmlReader.Value = "&quot;content&quot; And &#9472;";
    

    另一个选项是重新转义字符串:

        using System.Security;
    ....
    ....
        string val = SecurityElement.Escape(xmlReader.Value);