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" ]
  }

]、 "ステータス":"OK"}

標準の英語文字が含まれている他のリクエストは機能し、デバイスで正しく返されます。

4

1 に答える 1

8

コードのある時点で、おそらくNSURLクラスを使用していて、次のようになります。

渡されるパスが整形式でない場合、NSURLクラスは新しいNSURLオブジェクトの作成に失敗します。パスはRFC 2396に準拠している必要があります。成功しない場合の例は、スペース文字と高ビット文字を含む文字列です。NSURLオブジェクトの作成が失敗した場合、作成メソッドはnilを返します。これは、処理する準備ができている必要があります。

[NSString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]文字列を。に渡す前に、「Őrbottyán」の上位ビット文字を、を使用してパーセントエスケープに変換する必要がありますNSURL。最新のブラウザは、非準拠の文字列をURLフィールドに入力すると、この変換をサイレントに行いますが、コードでは明示的に行う必要があります。


以下のquantumpotatoの調査結果を含めるように編集します。「Őrbottyán」が「Orbottyan」(ASCIIエンコーディングへの「不可逆」変換)に変換された場合、Googleマップは正しいことを行い、その変換は次のラウンドトリップで実行できますNSData

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

「ASCIIへの不可逆変換」はすべてのWebサイトで機能するとは限らないのではないかと思いますが、Googleマップでテストおよび検証されているので、問題ありません。:-)

于 2011-06-01T17:03:05.007 に答える