2011-07-07 3 views
3

ロシアの誰かが私のウェブサイトから逆ジオコーディング応答を出しました。私はJsonを解析し、クライアント側で都市と州を1つの文字列に連結します。これは、連結された文字列が終わったものです:?逆ジオコーディングされたレスポンスのマーク

???? ?????-?????????, ?????? 

Googleが送信する状況はありますか?逆ジオコーディングされた応答からJsonを介してマークしますか?緯度/経度は正しい。

http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true

誰もが任意のアイデアを持っている:私は私のブラウザから直接、同じJSONのポストを作ったとき、私は正しい応答を得ましたか。

私はアメリカからJsonにアクセスしていて、彼はロシアからそれにアクセスしていた可能性がありますか?

EDIT:連結はここに起こる:

まず、私は結果を得る:キリル文字や他のいくつかの言語で

geocoder.geocode({'latLng': realUsersLoc}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     if (results[1]) { 
      var loc = getCityState(results); 

    function getCityState(results) 
{ 
    var city = ''; 
    var state = ''; 
    var bad = ''; 
    var good = ''; 
    var us = true; 
    // check for non-us 
    for (var i = 0; i < results[0].address_components.length; i++) 
    { 
     var shortname = results[0].address_components[i].short_name; 
     var longname = results[0].address_components[i].long_name; 
     var type = results[0].address_components[i].types; 
     if (type.indexOf("country") != -1) 
     { 
      if (!isNullOrWhitespace(shortname)) 
      { 
       us = (shortname == 'US'); 
      } 
      else 
      { 
       us = (longname == 'United States'); 
      } 
     } 
    } 
    if (!us) 
    { 
     for (var i = 0; i < results[0].address_components.length; i++) 
     { 
      var shortname = results[0].address_components[i].short_name; 
      var longname = results[0].address_components[i].long_name; 
      var type = results[0].address_components[i].types; 
      if (type.indexOf("country") != -1) 
      { 
       if (!isNullOrWhitespace(longname)) 
       { 
        state = longname; 
       } 
       else 
       { 
        state = shortname; 
       } 
      } 
      if (type.indexOf("administrative_area_level_1") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        city = shortname; 
       } 
       else 
       { 
        city = longname; 
       } 
      } 
      else if (type.indexOf("locality") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        city = shortname; 
       } 
       else 
       { 
        city = longname; 
       } 
      } 
     } 
    } 
    else 
    { 
     // us 
     for (var i = 0; i < results[0].address_components.length; i++) 
     { 
      var shortname = results[0].address_components[i].short_name; 
      var longname = results[0].address_components[i].long_name; 
      var type = results[0].address_components[i].types; 
      if (type.indexOf("administrative_area_level_1") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        state = shortname; 
       } 
       else 
       { 
        state = longname; 
       } 
      } 
      else if (type.indexOf("locality") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        city = shortname; 
       } 
       else 
       { 
        city = longname; 
       } 
      } 
      else if (type.indexOf("administrative_area_level_3") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        good = shortname; 
       } 
       else 
       { 
        good = longname; 
       } 
      } 
      else if (type.indexOf("administrative_area_level_2") != -1) 
      { 
       if (!isNullOrWhitespace(shortname)) 
       { 
        bad = shortname; 
       } 
       else 
       { 
        bad = longname; 
       } 
      } 
     } 
     if (city == '') 
     { 
      if (good != '') 
      { 
       city = good; 
      } 
      else 
      { 
       city = bad; 
      } 
     } 
    } 
    if (isNullOrWhitespace(city) && isNullOrWhitespace(state)) 
    { 
     return 'N/A'; 
    } 
    if (isNullOrWhitespace(city)) 
    { 
     return state; 
    } 
    else if (isNullOrWhitespace(state)) 
    { 
     return city; 
    } 
    return (city + ', ' + state) 
} 
+0

文字列をどのように連結するのか投稿できますか? – smoak

+0

ブラウザのテキストエンコードはおそらく? –

+0

ええ、私はブラッドと私はそのブラウザのエンコーディングの問題だと思います。 @smoak - posted。 – smoak

答えて

2

疑問符でダッシュがあることを考慮すると、これは文字セットの問題であり、Googleが疑問符を返信するケースではないようです。 (あなたのサイトがUTF-8を文字セットとして指定していることをどの程度確認していますか?)国際化を気にしない場合は、URLにlanguageパラメータを付けて結果を英語に強制することで問題を回避できます)。もちろんこれは理想的ではありませんが、用途によっては許容される場合もあります。

上記の回避策が受け入れられない可能性がある場合は、http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true&language=ruの結果を使用してコードを実行してください(ロシア語のデータを返すように末尾にlanguageパラメータを付けることに注意してください)。疑問符の問題を再現できるかどうか。 (ユーザーが問題を経験したときに使用していたブラウザ/プラットフォームを知っていれば、それだけ良いでしょう)

+0

これはこれまでのところ最も近い解決策であるようです。私は家に帰るときにこれを撃つだろう。 – slandau

0

たぶん、人の応答が返されたコンテンツを、あなたの文字セットが適切なものではないのですか?

+0

唯一の違いは彼らがいる国である場合、彼らの反応は異なるでしょうか?私が働いている場所から同じ投稿をしているので... – slandau

+0

たぶん彼は別の言語で返されるように頼んだのでしょうか?ワンダーですか? –

+0

リクエストは私のコードから生成されています... hm ... idkこれは混乱しています – slandau