Encoding und dann decodieren json mit nicht-ascii Zeichen in Python 2.7

Ich habe eine Python-Anwendung, die einige Objekte zu json kodiert, übergibt die json-Zeichenfolge zu einem anderen Programm und liest dann in einer möglicherweise modifizierten Version dieses json-Strings.

Ich muss das überprüfen, was sich mit den jsoncodierten Objekten verändert hat. Allerdings habe ich Probleme mit der Re-Encoding Nicht-Ascii Zeichen. Beispielsweise:

x = {'\xe2': None} # a dict with non-ascii keys y = json.dumps(x,ensure_ascii=False) y #> '{"\xe2": null}' 

Funktioniert ganz gut, aber wenn ich versuche, die json zu laden, bekomme ich:

 json.loads(y) #> UnicodeDecodeError: 'utf8' codec can't decode byte 0xe2 in position 0 json.loads(y.decode('utf-8','ignore')) #> "{u'': None}" json.loads(y.decode('utf-8','replace')) #> {u'\ufffd': None} 

Und leider '\xe2' in {u'\ufffd': None} wertet False

Ich bin bereit zu wetten, es ist eine einfache Lösung, aber alle meine googeln und die Suche auf SO hat es versäumt, eine adäquate Lösung zu finden.

One Solution collect form web for “Encoding und dann decodieren json mit nicht-ascii Zeichen in Python 2.7”

Der einfachste Weg, um dies zu beheben, ist, auf die Sache zu gehen, die dieses dict und die Dinge dort als utf-8 richtig kodiert. Derzeit sind deine Schlüssel als CP-1252 codiert.

 print('\xe2'.decode('cp1252')) â 

Wenn du nicht an der Quelle fixieren kannst, musst du etwas nachbearbeiten.

 d = {'\xe2': None} fixed_d = {k.decode('cp1252'):v for k,v in d.iteritems()} json.dumps(fixed_d) Out[24]: '{"\\u00e2": null}' json_dict_with_unicode_keys = json.dumps(fixed_d) json_dict_with_unicode_keys Out[32]: '{"\\u00e2": null}' print(json.loads(json_dict_with_unicode_keys).keys()[0]) â 

(Ein Teil des Inhalts dieser Antwort geht davon aus, dass du auf Python 2 bist, es gibt Unterschiede in der Unicode-Behandlung in py3)

  • Flasche - wie man Parameter von einer JSON GET Anfrage erhält
  • Mit JSON-Schlüsseln als python-Attribute in verschachteltem JSON
  • Wie benutzt man flask.jsonify und macht eine Vorlage in einer Flaschenroute
  • Liste der Objekte zu JSON mit Python
  • Python: lese json und loop Wörterbuch
  • JSON verging von Python (Flasche) in JavaScript wird auf dem Bildschirm angezeigt
  • Diagnose, wenn ich von der Diskette beschränkt bin
  • Übergeben von JSON-Daten an das Frontend mit Django
  • Einfügen von JSON in MySQL mit Python
  • App Engine zurück JSON von JsonProperty
  • Android-Authentifizierung mit JSON
  • Python ist die beste Programmiersprache der Welt.