"utf-8"でエンコードされた文字列が正常に印刷されないという問題が発生しました。この文字列にはアクセント付き文字(á、é、ü、ñなど)が含まれており、Wikipedia APIから返されたJSON dictの一部です。JSON辞書の文字列値のエンコーディングを変更するにはどうすればよいですか?
==完全なコード:以下
が文字Eと一例である==
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
の結果が異なるのはなぜですか? "José Eduardo Agualusa"
としてredirect_title
を印刷するにはどうすればよいですか?
は(uh.read 'からJSONデータのように私には見えるが)' ' 'ヨス\\ XE9エドゥアルドAgualusa''を持っています'' Jos \ xe9 Eduardo Agualusa ''ではなく、 'redirect_title2'を' 'redirect_title2''に変更すると結果が一致します。たぶんそれはAPIのバグです。 – martineau