Rumah > Soal Jawab > teks badan
在python2中用urllib模块去请求淘宝的IP地址查询接口,返回的是一段json字符串,如下所示:
import urllib
def get_data(ip):
url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
data = urllib.urlopen(url).read()
return data
if __name__ == "__main__":
result = get_data("59.151.5.5")
print(result)
返回结果如下:
{"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u534e\u5317","area_id":"100000","region":"\u5317\u4eac\u5e02","region_id":"110000","city":"\u5317\u4eac\u5e02","city_id":"110100","county":"","county_id":"-1","isp":"\u4e16\u7eaa\u4e92\u8054","isp_id":"100021","ip":"59.151.5.5"}}
在返回结果中,中文是以 unicode字符串表示,这样不方便阅读,我想让结果中中文部分直接用中文表示,就像下面这样:
"city":"北京","ISP":"中国电信"
如果是python3的话返回又是这样的:
b'{"code":0,"data":{"country":"\\u4e2d\\u56fd","country_id":"CN","area":"\\u534e\\u5317","area_id":"100000","region":"\\u5317\\u4eac\\u5e02","region_id":"110000","city":"\\u5317\\u4eac\\u5e02","city_id":"110100","county":"","county_id":"-1","isp":"\\u4e16\\u7eaa\\u4e92\\u8054","isp_id":"100021","ip":"59.151.5.5"}}'
请问在 python2和python3中分别该如何转码呢?
伊谢尔伦2017-04-18 10:33:42
Terdapat dua kaedah dalam Python3 yang boleh menyelesaikan masalah anda:
fungsi print()
Python3 mula mengekod sebagai UTF-8, jadi anda tahu, cuma cetak terus:
>>> print("\u5317\u4eac\u5e02")
北京市
Menggunakan pangkalan data Unikod
Terdapat perpustakaan terbina dalam unicodedata
, dan anda boleh memanggil dua kaedah dalam pustaka ini, seperti berikut:
>>> import unicodedata as u
# 这段字符串是来自你给提供的内容
>>> s = "\u5317\u4eac\u5e02"
>>> s1 = ''
>>> for i in s:
s1 += u.lookup(u.name(i))
# 输出结果
>>> s1
'北京市'
Untuk menambah, jika anda memproses aksara secara individu, anda boleh menggunakan kaedah di atas, tetapi selepas menjawab tadi, saya mendapati bahawa nilai pulangan anda ialah objek bait Pemprosesan objek ini sangat mudah dalam Python3 seperti berikut:
import urllib.request as r
def get_data(ip):
url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
data = r.urlopen(url).read()
return data
if __name__ == "__main__":
result = get_data("59.151.5.5")
print(eval(result))
Nilai pulangan selepas ujian saya ialah:
{'data': {'area_id': '100000', 'isp': '世纪互联', 'country_id': 'CN', 'country': '中国', 'region_id': '110000', 'county_id': '-1', 'ip': '59.151.5.5', 'city': '北京市', 'area': '华北', 'county': '', 'city_id': '110100', 'isp_id': '100021', 'region': '北京市'}, 'code': 0}
Berharap untuk menerima pakai
天蓬老师2017-04-18 10:33:42
Dalam Python 3, anda boleh menggunakan kaedah penyahkod untuk menukar bait kepada str:
result = get_data("59.151.5.5").decode('raw_unicode_escape')
PHPz2017-04-18 10:33:42
Baguslah ===
import json
print json.dumps(json.loads(result), ensure_ascii=False)