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

标签 .net xml encoding xmltextreader

我收到一个编码为“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(文件,编码。随便) 将文件加载到 XmlTextReader

以及在 Internet 和 StackOverflow istelf 上的几种变体和不同方法。

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

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

最佳答案

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

问题是 " 是一个 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);

关于.net - 为什么 xmltextreader 会自动将 html 编码的 utf8 字符转换为 utf8 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308230/

相关文章:

C# 无法链接 LinkedList 中的节点

.net - 如何在 .NET 中创建特定于域的字符串类?

c# - 将任务字典转换为结果字典

ruby-on-rails - 在 Rails 3.1 中构建站点地图

ruby - 响应重定向编码的 RestClient 错误

c# - 在签名的程序集中使用未签名的程序集

c# - 使用 XPATH 从 XML 文档中选择特定值?

java - 如何使用 ListViews 创建选项卡式 Activity - Android

python - 使用编码目标值

html -> 是什么字符编码?