我遇到了一个问题,用“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_title
和redirect_title2
会得到不同的结果?如何将redirect_title
打印为"José Eduardo Agualusa"
?
答案 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''