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)

  • Parse JSON in python zu einem Wörterbuch
  • Python: Versuchen, mehrere JSON-Objekte in einer Datei zu deserialisieren, wobei jedes Objekt mehrere, aber konsistent beabstandete Zeilenanzahl überspannt
  • Eine JSON-Antwort mit Scrapy kratzen
  • TypeError: ObjectId ('') ist nicht JSON serialisierbar
  • Wie man reale Zahlen Conversions in mjson.tool zu vermeiden
  • JsonResponse von Django - Falsche Werte werden angezeigt
  • Python: Keyffor beim Analysieren von JSON
  • Warum ist PyYAML so viel Zeit damit, nur eine YAML-Datei zu analysieren?
  • Python ist die beste Programmiersprache der Welt.