gpt4 book ai didi

c# - XmlDocument.Load() 方法无法解码 €(欧元)

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:54 24 4
gpt4 key购买 nike

我有一个 XML 文档 file.xml它以 Iso-latin-15(又名 Iso-Latin-9)编码

<?xml version="1.0" encoding="iso-8859-15"?>
<root xmlns="http://stackoverflow.com/demo">
<f>€.txt</f>
</root>

从我最喜欢的文本编辑器中,我可以看出这个文件以 Iso-Latin-15 正确编码(它不是 UTF-8)。

我的软件是用 C# 编写的,想要提取元素 f .
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("file.xml");

在现实生活中,我有一个 XMLResolver 来设置凭据。但基本上,我的代码就是这么简单。加载顺利,我没有提出任何异常。

现在,我提取值时的问题:
//xnsm is the XmlNameSpace manager
XmlNode n = xmlDoc.SelectSingleNode("//root/f", xnsm);
if (n != null)
String filename = n.InnerText;

Visual Studio 调试器显示文件名 = □.txt
它可能只是一个 Visual Studio 错误。不幸的是 File.Exists(filename)返回 false,而文件实际存在。

怎么了?

最佳答案

如果我没记错的话 XmlDocument.Load(string)方法始终假定 UTF-8,无论 XML 编码如何。

您必须创建一个 StreamReader使用正确的编码并将其用作参数。

xmlDoc.Load(new StreamReader(
File.Open("file.xml"),
Encoding.GetEncoding("iso-8859-15")));

编辑:

我只是偶然发现了 KB308061来自微软。有一段很有意思:

Specify the encoding declaration in the XML declaration section of the XML document. For example, the following declaration indicates that the document is in UTF-16 Unicode encoding format:

<?xml version="1.0" encoding="UTF-16"?>

Note that this declaration only specifies the encoding format of an XML document and does not modify or control the actual encoding format of the data.

关于c# - XmlDocument.Load() 方法无法解码 €(欧元),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com