我想使用 Google Maps API 对坐标/地址进行地理编码/反向地理编码。为此,我使用 C# 的 webclient 类的实例。
static string gMapsUrl= "http://maps.googleapis.com/maps/api/geocode/xml?address= {0}&sensor=false";
public static List<Location> RetrieveCoordinate(string address)
{
string requestUri = string.Format(gMapsUrl, address);
string result = string.Empty;
using (var client = new WebClient())
{
client.Encoding = System.Text.Encoding.UTF8;
result = client.DownloadString(requestUri);
}
....
}
这通常有效,但是假设我想对地址“Götznerstraße”进行反向地理编码。如果我在浏览器中手动执行此操作,则一切正常,请求的 URL 将是
http://maps.googleapis.com/maps/api/geocode/xml?address=götznerstraße&sensor=false
我的程序的最终请求看起来像这样
GET /maps/api/geocode/xml?address=G%C3%B6tznerstra%C3%9Fe&sensor=false HTTP/1.1
这会导致 Google 找不到匹配项。对我来说,网络客户端似乎在某个地方转义了元音变音,这使我无法获得结果。有没有办法阻止网络客户端执行此操作,或者让 Google 再次转义该字符串?
编辑: 我解决了这个问题,在比较浏览器和我的程序的请求后,我意识到我的浏览器正在发送一些额外的 header 。更改后的实现如下所示
using (var client = new WebClient())
{
client.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
client.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
client.Encoding = System.Text.Encoding.UTF8;
result = client.DownloadString(requestUri);
}
非常感谢所有提供帮助的人!
最佳答案
它必须转义网址。但是,没有什么可以阻止您使用 HttpUtility.UrlDecode 来取消转义它。 也看看here以获得更深入的答案。
关于c# - 阻止 webclient 转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375446/