我收到一个编码为“ISO-8859-1”(Latin-1)的 XML 文件
在文件中(以及其他标签)我有 <OtherText>Example "content" And ─</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 "content" And ─</OtherText>
对此:
<OtherText>Example &quot;content&quot; And &#9472;</OtherText>
然后
XmlReader.Value = ""content" And ─";
您需要将您的值包装在 CDATA 中,以便解析器忽略它。
另一种选择是重新转义字符串:
using System.Security;
....
....
string val = SecurityElement.Escape(xmlReader.Value);
关于.net - 为什么 xmltextreader 会自动将 html 编码的 utf8 字符转换为 utf8 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308230/