Warum Chinesisch zu \u4e2d\u6587 wird
Fazit: Ein \u4e2d\u6587-Escape ist legales Unicode, kein Kodierungsfehler. Echtes Kauderwelsch sieht anders aus, und die Unterscheidung entscheidet, was Sie tatsächlich reparieren müssen.

Kurz gesagt: Behandeln Sie \uXXXX-Ausgabe als legitimes Escaping, bestätigen Sie, dass es durch JSON.parse rundläuft, und schalten Sie reine ASCII-Serialisierung wie ensure_ascii=False ab, wenn Sie lesbares Chinesisch wollen; behalten Sie Escaping nur für Transporte, die kein Nicht-ASCII tragen können.
Weil es escaped wurde, nicht beschädigt.
JSON.parse('"\\u4e2d\\u6587"') // "中文"
\u4e2d ist 中 und \u6587 ist 文. Das sind legale Escape-Sequenzen; jeder Parser stellt sie wieder her. Nichts ist kaputt – es ist nur in Logs, Diffs und Packet Captures unlesbar.
Wer das Escaping macht
| Werkzeug | Standard | Schalter |
|---|---|---|
Python json.dumps |
Escaped (ensure_ascii=True) |
ensure_ascii=False |
JavaScript JSON.stringify |
Kein Escaping | — |
| Java Jackson | Kein Escaping | Optional |
PHP json_encode |
Kein Escaping seit 5.4 | — |
Go encoding/json |
Kein Escaping | — |
Python ist bei weitem die häufigste Quelle. Der Standard existiert aus einem Grund: reine ASCII-Ausgabe überlebt jeden Transport. Der Preis ist, dass jedes Nicht-ASCII-Zeichen zu sechs Zeichen wird.
Escaping versus Kauderwelsch
Escaping: \u4e2d\u6587, passend zu \uXXXX. Verursacht durch Serializer-Einstellungen.
Kauderwelsch: 测试, 涓枃. Verursacht durch Schreiben von UTF-8-Bytes und Lesen als Latin-1 oder GBK.
Schnelltest: Fügen Sie den Text in eine Browser-Konsole als JSON.parse('"…"') ein. Kommt er lesbar zurück, war es Escaping. Scheitert er oder bleibt verstümmelt, ist es ein Kodierungsmismatch – und die Behebung ist, die Kodierungen abzugleichen, nicht den Serializer anzufassen.
Es abschalten
json.dumps(data, ensure_ascii=False)
Prüfen Sie dann stromabwärts: Manche Legacy-Systeme verlassen sich wirklich auf reinen ASCII-Transport, besonders SMS-Gateways und ältere Mail-Relays.
Wann Escaping die richtige Wahl ist
- Transporte, die Nicht-ASCII feindlich gegenüberstehen (Legacy-HTTP-Header, manche SMS-Gateways)
- JSON, das in einem anderen JSON-String verschachtelt ist, wo Escaping Anführungszeichenkonflikte reduziert
- Log-Pipelines, die nach Bytes abschneiden und ein Mehrbytezeichen teilen würden
Andernfalls bevorzugen Sie Lesbarkeit und schalten es ab.
FAQ
Warum escaped Python Chinesisch standardmäßig?
Weil ensure_ascii=True der Standard ist, der reine ASCII-Ausgabe garantiert, die jeden Transport überlebt. Der Preis ist, dass jedes Nicht-ASCII-Zeichen zu sechs Zeichen wird.
Sollte ich ensure_ascii abschalten?
Schalten Sie es ab, wenn Lesbarkeit zählt. Prüfen Sie dann stromabwärts – Legacy-HTTP-Header, manche SMS-Gateways und Log-Pipelines, die nach Bytes abschneiden, können weiterhin auf reinen ASCII-Inhalt angewiesen sein.
Was passiert, wenn der Transport kein Nicht-ASCII tragen kann?
Behalten Sie das Escaping. Ist JSON in einem anderen JSON-String eingebettet oder reist es über einen Kanal, der Nicht-ASCII feindlich gegenübersteht, vermeidet Escaping Anführungszeichenkonflikte und verhindert, dass Mehrbytezeichen geteilt werden.