2

GET リクエストを介して、Google ジオコード API から json を取得します。

import urllib, urllib2

url = "http://maps.googleapis.com/maps/api/geocode/json"
params = {'address': 'ivory coast', 'sensor': 'false'}
request = urllib2.Request(url + "?" + urllib.urlencode(params))
response = urllib2.urlopen(request)
st = response.read()

出てくるものは次のようになります。

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Côte d'Ivoire",
               "short_name" : "CI",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Côte d'Ivoire",
         "geometry" : { ... # rest snipped

ご覧のとおり、国名にはいくつかのエンコードの問題があります。私はこのようなエンコーディングを推測しようとしました:

import chardet
encoding = chardet.detect(st)
print "String is encoded in {0} (with {1}% confidence).".format(encoding['encoding'], encoding['confidence']*100)

どちらが返されますか:

String is encoded in GB2312 (with 99.0% confidence).

ô私が知りたいのは、これを(サーカムフレックス付きの o) が適切に表示されるエンコーディングを使用して辞書に変換する方法です。

私は試した:

st = st.decode(encoding['encoding']).encode('utf-8')

しかし、私は得る:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "C么te d'Ivoire",
               "short_name" : "CI",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "C么te d'Ivoire",
         "geometry" : { ... # rest snipped
4

2 に答える 2

3

google apiの結果は常にでエンコードされUTF-8ます。これは、HTTPContent-Typeヘッダーから手動で読み取ることもできます。

ここに画像の説明を入力してください

于 2012-12-19T18:08:07.540 に答える
2

(適切に) デコードしたら、再エンコードしないでください。完全にうまく機能jsonします。unicode

>>> json.loads(u"[\"C\xf4te d'Ivoire\"]")
[u"C\xf4te d'Ivoire"]
于 2012-12-19T18:14:43.280 に答える