JSON Toolkit

Mengapa teks Tionghoa berubah menjadi \u4e2d\u6587

Intinya: Escape \u4e2d\u6587 adalah Unicode yang legal, bukan kegagalan encoding. Mojibake sungguhan tampak berbeda, dan membedakan keduanya menentukan apa yang sebenarnya perlu Anda perbaiki.

Pemula±3 menit bacaDiterbitkan 2026-10-30Diperbarui 2026-10-30
Unicode escaping versus mojibake sungguhan di JSON

Intinya: perlakukan output \uXXXX sebagai escaping yang legal, pastikan ia kembali utuh melalui JSON.parse, dan matikan serialisasi ASCII murni seperti ensure_ascii=False ketika Anda ingin teks Tionghoa yang terbaca; pertahankan escaping hanya untuk transport yang tidak dapat membawa non-ASCII.

Karena teksnya di-escape, bukan dirusak.

JSON.parse('"\\u4e2d\\u6587"')  // "中文"

\u4e2d adalah 中 dan \u6587 adalah 文. Ini urutan escape yang legal; parser apa pun memulihkannya. Tidak ada yang rusak — hanya saja tidak terbaca di log, diff dan packet capture.

Siapa yang melakukan escaping

Alat Default Saklar
Python json.dumps Melakukan escape (ensure_ascii=True) ensure_ascii=False
JavaScript JSON.stringify Tanpa escaping —
Java Jackson Tanpa escaping Opsional
PHP json_encode Tanpa escaping sejak 5.4 —
Go encoding/json Tanpa escaping —

Python sejauh ini adalah sumber paling umum. Default itu ada alasannya: output ASCII murni bertahan di transport apa pun. Biayanya adalah setiap karakter non-ASCII menjadi enam karakter.

Escaping versus mojibake

Escaping: \u4e2d\u6587, cocok dengan \uXXXX. Disebabkan oleh pengaturan serializer. Mojibake: 测试, 涓枃. Disebabkan oleh menulis byte UTF-8 lalu membacanya sebagai Latin-1 atau GBK.

Uji cepat: tempel teks ke konsol browser sebagai JSON.parse('"…"'). Jika hasilnya kembali terbaca, itu escaping. Jika gagal atau tetap rusak, itu ketidakcocokan encoding — dan perbaikannya adalah menyelaraskan encoding, bukan menyentuh serializer.

Mematikannya

json.dumps(data, ensure_ascii=False)

Lalu verifikasi di hilir: sebagian sistem lama memang bergantung pada transport ASCII-only, khususnya gateway SMS dan relay email lama.

Kapan escaping adalah pilihan yang tepat

  • Transport yang bermusuhan dengan non-ASCII (header HTTP lama, sebagian gateway SMS)
  • JSON yang disematkan di dalam string JSON lain, di mana escaping mengurangi konflik tanda kutip
  • Pipeline log yang memotong berdasarkan byte dan akan memecah karakter multi-byte

Selain itu, utamakan keterbacaan dan matikan.

FAQ

Mengapa Python meng-escape teks Tionghoa secara default?

Karena ensure_ascii=True adalah default, yang menjamin output ASCII murni yang bertahan di transport apa pun. Biayanya adalah setiap karakter non-ASCII menjadi enam karakter.

Haruskah saya mematikan ensure_ascii?

Matikan bila keterbacaan penting. Lalu verifikasi di hilir — header HTTP lama, sebagian gateway SMS dan pipeline log yang memotong berdasarkan byte mungkin masih bergantung pada konten ASCII-only.

Apa yang terjadi jika transport tidak dapat membawa non-ASCII?

Pertahankan escaping. Ketika JSON disematkan di dalam string JSON lain, atau melewati kanal yang bermusuhan dengan non-ASCII, escaping menghindari konflik tanda kutip dan mencegah karakter multi-byte terpecah.

Bacaan lanjutan