我遇到了我的程序问题。 我访问google places api并获取一个json,解析它并获取我感兴趣的值并将它们写入文件。我对google的api响应中的unicode字符有疑问。 我正在使用在Ubuntu 17.04上运行的python 2.7.13。
问题是API将字符串返回为:
Museo Nacional Centro de ArteReinaSofía
有一个特殊的字符:í
但是在文件中我发现了这个:
Museo Nacional Centro de Arte Reina Sof \ u00eda
从请求中获取数据并使用json.loads后,我在dict中获得unicode字符串,并从那里继续使用转义字符。 这是我的代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib2
import json
def getPlaces(category, country, city, url, token):
requestURL = url.replace("CATEGORY", category)
requestURL = requestURL.replace("CITY", city)
if not (token is None):
requestURL = requestURL + "&pagetoken=" + token
jsonData = urllib2.urlopen(requestURL).read()
data = json.loads(jsonData)
result = []
for item in data["results"]:
result.append(getRowData(item, country, category))
if "next_page_token" in data:
nextToken = data["next_page_token"]
result = result + getPlaces(category, country, city, url, nextToken)
return result
def getRowData(item, country, category):
lsit = []
name = item["name"]
lat = item["geometry"]["location"]["lat"]
lng = item["geometry"]["location"]["lng"]
return [country, category, name, lat, lng]
# def listToStr(lst):
# result = '[ '
# if lst[0] is
def_url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=CATEGORY+in+CITY&key=NOKEY:)"
attractions = getPlaces("museum", "Spain", "Madrid", def_url, None)
with open('data.txt', 'w') as outfile:
json.dump(attractions, outfile)
我已经阅读了有关我正在使用的libs的主题和信息,但是我无法解决这个问题。
答案 0 :(得分:-1)
也许你可以试试encode()。decode(),因为"Sof\u00eda".encode().decode()
工作正常。
在您的代码中,我会像这样更改getRowData
函数:
def getRowData(item, country, category):
lsit = []
name = item["name"]
lat = item["geometry"]["location"]["lat"]
lng = item["geometry"]["location"]["lng"]
return [country.encode().decode(), category.encode().decode(),
name.encode().decode(), lat, lng]