【问题标题】:Cant get correct result from XmlDocument Load-method because of the characters由于字符,无法从 XmlDocument 加载方法获得正确的结果
【发布时间】:2011-07-13 09:50:06
【问题描述】:

编辑:通过更改 web 服务解释 GET 请求(到 UTF-8)的方式解决了这个问题。

我将一个字符串发送到一个向我返回 XML 的 URL。但是,如果我发送特殊字符(例如 å、ä、ö),生成的 XML 将不正确。而且我无法让它工作。

 string name= "abc def åäö";
//name= Uri.EscapeUriString(address); - i also tried this but it messes up the åäö chars in the resulting xml
string uri = "http://blablabla&address=" + name+ "&outputFormat=xml";

System.Xml.XmlDocument x = new System.Xml.XmlDocument();
x.Load(uri);
XmlElement root = x.DocumentElement;
foreach (XmlNode node in root.ChildNodes)
{
     XmlAttribute attr = (XmlAttribute)node.Attributes.GetNamedItem("name");
     System.Windows.Forms.MessageBox.Show(attr.Value);
}

【问题讨论】:

  • 您是否尝试在网络浏览器中加载相同的文档以查看是否获得相同的文档?
  • 如果我只是在浏览器中使用相同的字符加载相同的 URL,我会得到正确的结果。
  • 这个问题和XmlDocument一点关系都没有。尝试使用WebClient 下载文档。您首先必须弄清楚如何让对方正确响应,然后才能担心将正确的响应加载到XmlDocument
  • 我正在使用 CF,所以我尝试了 HttpWebRequest 而不是 WebClient,但它似乎像 Load 方法一样将十六进制代码发送到另一端。还有什么我可以尝试得到正确响应的方法吗?

标签: c# xml encoding xmldocument


【解决方案1】:

我相信你的做法是正确的。您最终应该将字符编码为一对十六进制数字,每个数字前面都有一个百分比符号,例如å 变为 %c3%a5。 Web 服务器/应用程序服务器应该透明地将这些解码回相应的字符。

另请参阅HttpUtility.UrlEncodeUnicode(string),它将使用另一种编码,尽管我不确定这是否会被所有 Web 服务器处理。

【讨论】:

  • 没错,问题是我根据这些十六进制数字对得到结果,所以它们似乎没有在另一边被解码。有没有办法在不“翻译”它们的情况下调用 Load?
  • 在这种情况下,我想服务器应用程序根本没有正确解码 url 参数,您的代码绝对没问题。当您没有对它们进行编码时,您的浏览器会显示正确的值,这只是巧合,因为 url 参数是为结果文档“正确”编码的。
  • 我能做些什么吗?
【解决方案2】:

我不知道这是否有帮助,但请记住 attr.Value 将逃避 Xml 类型的转义。不过,这似乎可能不是问题所在。不要检查 attr.Value,而是检查 node.OuterXml 以查看它是否符合您的期望。

【讨论】:

  • 我得到了一个结果,但它不是正确的。如果我将字符串更改为有效的,那么结果将是正确的。所以不应该这样。 (我还使用断点检查了 XML 内部)。
  • 当您浏览到 url 时会发生什么。这会产生预期的结果吗?
  • 对不起,我现在看到你已经这样做了。我要做的是保存浏览的文件,然后加载它,并使用 attr.value 以编程方式进行一些读取和写入,确定其行为是否一致。
  • 是的,但我如何浏览到显示代码正确结果的文件(即看起来像我会在浏览器中键入 URL 的文件)?请参阅我对 John Saunders 的回复。
  • 我的目标是尝试缩小正在发生的事情,如果由于通过 url 访问 xml 而出现异常情况。所以想法是使用浏览器转到 url,保存您在浏览器中看到的内容(您所说的显示正确)然后将该文件加载到 XmlDocument 中,然后查看您的 attr.val 是否相同(错误),并且/ 或读取 attr.val 并将 attr.val 写入另一个节点,然后检查是否一致。
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2017-02-03
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多