C# 将XML加载到包含符号的URL的XDocument
调用C# 将XML加载到包含符号的URL的XDocument,c#,linq-to-xml,C#,Linq To Xml,调用Load()方法时,在包含URL的字符串中,符号&不是受支持的字符。出现以下错误: XmlException未处理:给定编码中的字符无效 如何将XML从URL加载到一个XDocument中,而该URL在查询字符串中有一个符号? 您需要将其URL编码为&: XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt"); 您可以使用WebUtility.HtmlEncode自
Load()
方法时,在包含URL的字符串中,符号&
不是受支持的字符。出现以下错误:
XmlException未处理:给定编码中的字符无效
如何将XML从URL加载到一个XDocument中,而该URL在查询字符串中有一个符号?
您需要将其URL编码为&代码>:
XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。
编辑:这里真正的问题与符号无关,而是与Google使用自定义编码对XML文档进行编码的方式有关,并且没有声明它。(只有当符号出现在特殊上下文中时,才需要对其进行编码,例如,以便快速解释。)
由于XML声明没有指定编码,XDocument.Load
在内部按照XML规范的要求返回默认UTF-8编码,这与实际数据不兼容
为了避免这个问题,您可以获取原始数据并使用下面的示例手动解码。我不知道编码是否真的是Windows-1252,所以您可能需要尝试一下其他编码
XDocument xd = XDocument.Load(
"http://www.google.com/ig/api?weather=vilnius&hl=lt");
您需要将其URL编码为&代码>:
XDocument xd = XDocument.Load("http://www.google.com/ig/api?weather=vilnius&hl=lt");
您可以使用WebUtility.HtmlEncode
自动执行此转换;但是,请注意,这不是该方法的预期用途。
编辑:这里真正的问题与符号无关,而是与Google使用自定义编码对XML文档进行编码的方式有关,并且没有声明它。(只有当符号出现在特殊上下文中时,才需要对其进行编码,例如,以便快速解释。)
由于XML声明没有指定编码,XDocument.Load
在内部按照XML规范的要求返回默认UTF-8编码,这与实际数据不兼容
为了避免这个问题,您可以获取原始数据并使用下面的示例手动解码。我不知道编码是否真的是Windows-1252,所以您可能需要尝试一下其他编码
XDocument xd = XDocument.Load(
"http://www.google.com/ig/api?weather=vilnius&hl=lt");
您的代码没有问题-在查询字符串中有&
是完全可以的,这是定义独立参数的方式
查看错误时,您会发现它无法加载XML,而不是从Url查询:
XmlException:给定编码中的字符无效。第1行,473号位置
这显然超出了查询字符串的范围
问题可能是XML响应中的“Apsiniaukę”(注意最后一个字符)…您的代码没有问题-在查询字符串中有&
是完全可以的,这是如何定义单独的参数
查看错误时,您会发现它无法加载XML,而不是从Url查询:
XmlException:给定编码中的字符无效。第1行,473号位置
这显然超出了查询字符串的范围
问题可能是XML响应中的“Apsiniaukę”(注意最后一个字符)…而不是“&”使用“&
”或“&;
”。它会很好的工作 使用“&
”或“&;
”,而不是“&”。它会很好的工作 -1。这回答了不同的问题——“如果我的查询参数包含“and”怎么办”,这与OP的问题不同。@AlexeiLevenkov:我相信你可能弄错了。OP引用的XmlException
错误是由未编码的“与”符号引起的,我在回答中解释了解决方法。这是他们隐含的假设,即即使编码,符号也不能传递给Load
,这是不正确的。不太可能:)OP已经问了一个问题,为什么url的构造方式不能给出预期的结果-。请注意,您的建议将第二个查询参数从“hl=…”更改为“amp;hl=…”,这显著修改了Url。问题不是我回答了另一个问题,而是OP的问题(“如何将XML从Url加载到一个XDocument,其中Url在查询字符串中有一个符号?”)基于不正确的前提。以下是完整答案的+1。我同意OP的问题不清楚(或者与问题无关)。也许加上你的建议完全改变了查询的解释会阻止OP走上错误的道路。这回答了不同的问题——“如果我的查询参数包含“and”怎么办”,这与OP的问题不同。@AlexeiLevenkov:我相信你可能弄错了。OP引用的XmlException
错误是由未编码的“与”符号引起的,我在回答中解释了解决方法。这是他们隐含的假设,即即使编码,符号也不能传递给Load
,这是不正确的。不太可能:)OP已经问了一个问题,为什么url的构造方式不能给出预期的结果-。请注意,您的建议将第二个查询参数从“hl=…”更改为“amp;hl=…”,这显著修改了Url。问题不是我回答了另一个问题,而是OP的问题(“如何将XML从Url加载到一个XDocument,其中Url在查询字符串中有一个符号?”)基于不正确的前提。以下是完整答案的+1。我同意OP的问题不清楚(或者与问题无关)。也许添加您的建议完全改变查询的解释会阻止OP走错路线。谢谢,如何解决这个问题,我的意思是像ę
这样的特殊符号,您可以将流作为数据而不是XML查询,然后尝试使用UTF-16编码加载