如何更改JSON字典字符串值的编码?

时间:2016-06-22 15:43:35

标签: python json encoding diacritics wikipedia-api

我遇到了一个问题,用“utf-8”编码的字符串没有按预期打印。该字符串包含重音字母(á,é,ü,ñ等),并且是从Wikipedia API返回的JSON字典的一部分。

以下是字母é:

的示例

==完整代码:==

import urllib
import json
import re

def check(wikitext):
    redirect_title = re.findall('\[\[[\S ]+\]\]', str(wikitext))[0]
    redirect_title = redirect_title.strip('[]')
    redirect_title = redirect_title.decode('ISO-8859-1').encode('utf8') 
    return redirect_title

serviceurl = 'https://en.wikipedia.org/w/api.php?'
action = 'parse'
formatjs = 'json'
prop = 'text|wikitext'
title = 'Jose Eduardo Agualusa'
url = serviceurl + urllib.urlencode({'action':action, 'page': title, 'format': formatjs, 'prop': prop})
uh = urllib.urlopen(url)
data = uh.read()
try: 
    js = json.loads(data)
except: 
    js = None
    print ' Page is not found'

wikitext = js["parse"]["wikitext"]
redirect_title = check(wikitext)
print 'redirect_title:',redirect_title

redirect_title2 = 'Jos\xe9 Eduardo Agualusa'
redirect_title2 = redirect_title2.decode('ISO-8859-1').encode('utf8')
print 'redirect_title2:', redirect_title2

结果是:

redirect_title: Jos\xe9 Eduardo Agualusa
redirect_title2: José Eduardo Agualusa

redirect_title从Wikipedia API JSON解析。在编码之前,它打印为'Jos\xe9 Eduardo Agualusa'。编码后,它似乎没有改变。

redirect_title2直接使用字符串'Jos\xe9 Eduardo Agualusa'分配,然后进行编码。

为什么redirect_titleredirect_title2会得到不同的结果?如何将redirect_title打印为"José Eduardo Agualusa"

1 个答案:

答案 0 :(得分:0)

你的public int PaymentType { get; internal set; } 例程做了一些非常奇怪的事情,包括解析字典的字符串表示。

请改为尝试:

check()

或者这个:

def check(wikitext):
    for value in wikitext.values():
        result = re.findall(ur'\[\[.*?\]\]', value)
        if result:
            return result[0].strip(u'[]')
    return u''