Ich stieß auf ein Problem eine Zeichenfolge mit der Codierung "UTF-8" wird nicht wie erwartet gedruckt. Die Zeichenfolge enthält akzentuierte Buchstaben (á, é, ü, ñ usw.) und ist Teil eines JSON-Diktats, das von der Wikipedia-API zurückgegeben wird.Wie ändert man die Kodierung des JSON-Wörterbuch-String-Wertes?
Im Folgenden ein Beispiel mit dem Buchstaben E:
== Der vollständige Code: ==
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
Das Ergebnis ist:
redirect_title: Jos\xe9 Eduardo Agualusa
redirect_title2: José Eduardo Agualusa
redirect_title
aus der analysiert wird, Wikipedia-API-JSON. Vor der Codierung wird als 'Jos\xe9 Eduardo Agualusa'
gedruckt. Nach der Verschlüsselung scheint sich das nicht zu ändern.
redirect_title2
wird direkt mit der Zeichenfolge 'Jos\xe9 Eduardo Agualusa'
zugewiesen und dann codiert.
Warum bekomme ich unterschiedliche Ergebnisse für redirect_title
und redirect_title2
? Wie kann ich redirect_title
drucken als "José Eduardo Agualusa"
?
mir sieht aus wie die JSON-Daten aus 'uh.read()' 'hat 'Jos \\ xe9 Eduardo Agualusa'' in ihr nicht "Jos \ xe9 Eduardo Agualusa" - wenn du "redirect_title2" auf "extro" änderst, stimmen die Ergebnisse überein. Vielleicht ist es ein API-Fehler. – martineau