2

试试:http ://maps.googleapis.com/maps/api/geocode/json?address =Őrbottyán,Hungary&sensor=true

在 iPhone 4 和模拟器上,

 -(void)requestFailed:(ASIHTTPRequest *)request {
   NSLog(@"geocode fail code: %d",[request responseStatusCode]);
   NSLog(@"geocoding failed: %@",[request responseString]);
}
2011-06-01 11:36:27.343 app[1174:307] geocode fail code: 0
2011-06-01 11:36:27.345 app[1174:307] geocoding failed: (null)

在浏览器中,我得到:

   "results" : [
    {
    "address_components" : [
        {
           "long_name" : "Őrbottyán",
           "short_name" : "Őrbottyán",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Pest",
           "short_name" : "Pest",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "Hungary",
           "short_name" : "HU",
           "types" : [ "country", "political" ]
        }
     ],
     "formatted_address" : "Őrbottyán, Hungary",
     "geometry" : {
        "bounds" : {
           "northeast" : {
              "lat" : 47.7138950,
              "lng" : 19.34353090
           },
           "southwest" : {
              "lat" : 47.63339999999999,
              "lng" : 19.2051070
           }
        },
        "location" : {
           "lat" : 47.6846190,
           "lng" : 19.2883260
        },
        "location_type" : "APPROXIMATE",
        "viewport" : {
           "northeast" : {
              "lat" : 47.7138950,
              "lng" : 19.34353090
           },
           "southwest" : {
              "lat" : 47.63339999999999,
              "lng" : 19.2051070
           }
        }
     },
     "types" : [ "locality", "political" ]
  }

],“状态”:“确定”}

其他带有标准英文字符的请求确实可以在设备上正常工作并返回。

4

1 回答 1

8

在您的代码中的某个时刻,您可能正在使用NSURL该类,并且:

如果传递的路径格式不正确,则 NSURL 类将无法创建新的 NSURL 对象——路径必须符合 RFC 2396。不成功的例子是包含空格字符和高位字符的字符串。如果创建 NSURL 对象失败,创建方法返回 nil,您必须准备好处理它。

[NSString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]将字符串传递给NSURL. 当您将不符合要求的字符串放入 URL 字段时,现代浏览器会默默地为您进行此转换,但在代码中您必须明确地执行此操作。


编辑在下面包含quantumpotato的发现:如果“Őrbottyán”转换为“Orbottyan”(“有损”转换为ASCII编码),谷歌地图将做正确的事情,并且可以通过往返执行该转换NSData

NSData *data = [urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSURL *url = [NSURL URLWithString:dataString];
[dataString release];

我怀疑“有损转换为 ASCII”可能不适用于所有网站,但它已经过 Google Maps 的测试和验证,所以你有它。:-)

于 2011-06-01T17:03:05.007 回答