通过json API访问网站(Glosbe.com)时,特殊字符不会解码

时间:2013-11-27 17:41:45

标签: python json python-3.x decoding

通过API访问this Glosbe.com时,以下代码无法解码特殊字符或撇号。

例如,它会打印perché,而不是perché。在检查网站来源时,它说charset是utf-8。有什么想法吗?

# -*- coding: utf-8 -*-
import urllib.request
import json

url = ' http://glosbe.com/gapi/translate?from=fra&dest=eng&format=json&phrase=chat&pretty=true'


weburl = urllib.request.urlopen(url)
data = weburl.read().decode('utf-8') 

theJSON = json.loads(data)
print(theJSON)

1 个答案:

答案 0 :(得分:1)

该网站似乎为您提供HTML实体数据。使用以下命令解码HTML实体:

from html.parser import HTMLParser

def unescape_entities(value, parser=HTMLParser()):
    return parser.unescape(value)

def process(ob):
    if isinstance(ob, list):
        return [process(v) for v in ob]
    elif isinstance(ob, dict):
        return {k: process(v) for k, v in ob.items()}
    elif isinstance(ob, str):
        return unescape_entities(ob)
    return ob

theJSON = process(theJSON)

演示:

>>> theJSON['tuc'][0]['meanings'][-1]
{'language': 'fra', 'text': 'Mammifère carnivore, félin de taille moyenne au museau court et arrondi, domestiqué ou encore à l'état sauvage (Felis silvestris).'}
>>> theJSON = process(theJSON)
>>> theJSON['tuc'][0]['meanings'][-1]
{'language': 'fra', 'text': "Mammifère carnivore, félin de taille moyenne au museau court et arrondi, domestiqué ou encore à l'état sauvage (Felis silvestris)."}