3

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

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

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

那么,当面对一个只接受 Latin-1 编码的数据库时,显然是错误的。

我尝试了以下方法:

  • 转换为字节并使用 Encoding.Convert 从 UTF-8 更改为 Latin-1(这成功地给了我一堆“?”代替)
  • 使用 StreamReader(file,Encoding.whatever )将文件加载到 XmlTextReader

以及互联网和 StackOverflow istelf 上的几种变体和不同的方法。

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

除了编写我自己的自定义文本解析器之外,有没有办法解决这个问题???

4

1 回答 1

3

我不相信这是编码的问题。您看到的是未转义的 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;";

您需要将值包装在 CDATA 中,以便解析器忽略它。

另一种选择是重新转义字符串:

    using System.Security;
....
....
    string val = SecurityElement.Escape(xmlReader.Value);
于 2010-07-22T15:06:28.570 回答