JSON Toolkit

লেখা কেন \u4e2d\u6587 হয়ে যায়

সংক্ষেপে: \u4e2d\u6587 এস্কেপ বৈধ ইউনিকোড, এনকোডিং ব্যর্থতা নয়। আসল mojibake আলাদা দেখায়, আর দুইটা আলাদা করা ঠিক করে দেয় আসলে কী ঠিক করতে হবে।

শিক্ষানবিশ~3 মিনিট পড়াপ্রকাশ 2026-10-30আপডেট 2026-10-30
JSON-এ ইউনিকোড এস্কেপিং বনাম আসল mojibake

মূল কথা: \uXXXX আউটপুটকে বৈধ এস্কেপিং ধরুন, নিশ্চিত করুন তা JSON.parse দিয়ে round-trip করে, আর পাঠযোগ্য লেখা চাইলে ensure_ascii=False-এর মতো pure-ASCII সিরিয়ালাইজেশন বন্ধ করুন; কেবল এমন পরিবহনে এস্কেপিং রাখুন যা নন-ASCII বহন করতে পারে না।

কারণ এটি এস্কেপ হয়েছে, নষ্ট হয়নি।

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

\u4e2d হলো 中 আর \u6587 হলো 文। এগুলো বৈধ এস্কেপ ক্রম; যেকোনো পার্সার ফিরিয়ে দেয়। কিছুই ভাঙেনি — লগ, ডিফ ও প্যাকেট ক্যাপচারে কেবল অপাঠ্য।

কে এস্কেপ করে

টুল ডিফল্ট টগল
Python json.dumps এস্কেপ করে (ensure_ascii=True) ensure_ascii=False
JavaScript JSON.stringify এস্কেপ নেই —
Java Jackson এস্কেপ নেই ঐচ্ছিক
PHP json_encode ৫.৪ থেকে এস্কেপ নেই —
Go encoding/json এস্কেপ নেই —

Python বহুলাংশে সবচেয়ে সাধারণ উৎস। ডিফল্টের কারণ আছে: pure ASCII আউটপুট যেকোনো পরিবহনে টেকে। দাম হলো প্রতিটি নন-ASCII অক্ষর ছয় অক্ষর হয়ে যায়।

এস্কেপিং বনাম mojibake

এস্কেপিং: \u4e2d\u6587, \uXXXX-এর সঙ্গে মেলে। সিরিয়ালাইজার সেটিং থেকে। Mojibake: 测试, 涓枃। UTF-8 বাইট লিখে সেগুলো Latin-1 বা GBK হিসেবে পড়া থেকে।

দ্রুত পরীক্ষা: টেক্সট ব্রাউজার কনসোলে JSON.parse('"…"') হিসেবে পেস্ট করুন। পাঠযোগ্য ফিরে এলে তা এস্কেপিং ছিল। ব্যর্থ বা তবু এলোমেলো থাকলে তা এনকোডিং না-মেলা — আর সমাধান এনকোডিং মেলানো, সিরিয়ালাইজার ছোঁয়া নয়।

বন্ধ করা

json.dumps(data, ensure_ascii=False)

তারপর ডাউনস্ট্রিম যাচাই করুন: কিছু লিগ্যাসি সিস্টেম সত্যিই ASCII-only পরিবহনের উপর নির্ভর করে, বিশেষত SMS গেটওয়ে ও পুরোনো মেইল রিলে।

কখন এস্কেপিং সঠিক পছন্দ

  • নন-ASCII-র প্রতি প্রতিকূল পরিবহন (লিগ্যাসি HTTP হেডার, কিছু SMS গেটওয়ে)
  • অন্য JSON স্ট্রিংয়ের ভেতরে নেস্টেড JSON, যেখানে এস্কেপিং কোট-সংঘর্ষ কমায়
  • বাইটে truncate করা লগ পাইপলাইন যা মাল্টি-বাইট অক্ষর ভাগ করে ফেলত

অন্যথায় পাঠযোগ্যতাকে অগ্রাধিকার দিন ও বন্ধ করুন।

সাধারণ প্রশ্ন

Python ডিফল্টে লেখা এস্কেপ করে কেন?

কারণ ensure_ascii=True ডিফল্ট, যা যেকোনো পরিবহনে টেকা pure ASCII আউটপুট নিশ্চিত করে। দাম হলো প্রতিটি নন-ASCII অক্ষর ছয় অক্ষর হয়ে যায়।

ensure_ascii বন্ধ করা উচিত?

পাঠযোগ্যতা গুরুত্বপূর্ণ হলে বন্ধ করুন। তারপর ডাউনস্ট্রিম যাচাই করুন — লিগ্যাসি HTTP হেডার, কিছু SMS গেটওয়ে ও বাইটে truncate করা লগ পাইপলাইন তবু ASCII-only কন্টেন্টের উপর নির্ভর করতে পারে।

পরিবহন নন-ASCII বহন করতে না পারলে কী হয়?

এস্কেপিং রাখুন। JSON অন্য JSON স্ট্রিংয়ের ভেতরে এম্বেড হলে, বা নন-ASCII-র প্রতি প্রতিকূল চ্যানেলে গেলে, এস্কেপিং কোট-সংঘর্ষ এড়ায় ও মাল্টি-বাইট অক্ষর ভাগ হওয়া ঠেকায়।

আরও পড়ুন