gpt4 book ai didi

c# - 使用包含 & 符号的 URL 将 XML 加载到 XDocument

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

XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");

在调用 Load() 方法时,& 符号 & 不是包含 URL 的字符串中受支持的字符。发生此错误:

XmlException was unhandled: Invalid character in the given encoding

如何将 XML 从 URL 加载到 XDocument,其中 URL 在查询字符串中有一个 & 符号?

最佳答案

<罢工>您需要将其 URL 编码为 &amp; :

<罢工>
XDocument xd = XDocument.Load(
"http://www.google.com/ig/api?weather=vilnius&amp;hl=lt");

使用 WebUtility.HtmlEncode 或许可以逃脱惩罚自动执行此转换;但是,请注意这不是该方法的预期用途。

编辑:这里的真正问题与符号无关,而与 Google 使用自定义编码对 XML 文档进行编码的方式有关,但未能声明它。 (只有当符号出现在特殊上下文中时才需要对其进行编码,例如 (X)HTML 的 <a href="…" /> 元素。阅读 Ampersands (&'s) in URLs 以获得快速解释。)

由于 XML 声明没有指定编码, XDocument.Load根据 XML 规范的要求,在内部回退到默认的 UTF-8 编码,这与实际数据不兼容。

要避免此问题,您可以获取原始数据并使用下面的示例手动对其进行解码。我不知道编码是否真的是 Windows-1252,所以您可能需要尝试一下其他编码。

string url = "http://www.google.com/ig/api?weather=vilnius&hl=lt";
byte[] data;
using (WebClient webClient = new WebClient())
data = webClient.DownloadData(url);

string str = Encoding.GetEncoding("Windows-1252").GetString(data);
XDocument xd = XDocument.Parse(str);

关于c# - 使用包含 & 符号的 URL 将 XML 加载到 XDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455335/

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