c# - 阻止 webclient 转义字符串

标签 c# google-maps webclient diacritics

我想使用 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/

相关文章:

c# - 在 Linux 上使用 Mono-C# 时 glXChooseVisual 失败

javascript - ImageMapType 上的水平重复 Google map 标记

C# FTP 与 WebClient 错误 : The remote server returned an error: (534) 534 Policy requires SSL

java - 测量与数据库相关的网站的运行时间

c# - Windows 8 中不存在 WebClient 类

c# - 制作 C# RegEx 匹配返回意外数据

c# - 如何验证该列是否存在于 DataRow 对象中?

c# - 操作 链接到 "lose"参数

android - 谷歌地图插件在显示时会导致 Flutter 应用程序崩溃

android - 仍然错误 Android : Unable to start activity ComponentInfo{/com. } : android. view.InflateException: Binary XML file line Error inflating class fragment