Python ও pandas-এ বাংলা লেখার এনকোডিং ঠিক করুন

pandas বাংলার বদলে বাংলা পড়ছে, UnicodeDecodeError দিয়ে থেমে যাচ্ছে, কিংবা এক্সপোর্ট করা CSV Excel-এ ভুল দেখাচ্ছে? Python-এ encoding প্যারামিটার ঠিক করে দেয় লেখা ঠিক থাকবে নাকি ভাঙবে। এখানে সাধারণ ঘটনাগুলো আছে – আর ভাঙা ফাইল ওপরে ব্রাউজারেই ঠিক করা যায়।

লেখা এবং এই ফাইলগুলো চলে:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

যেমন Excel এক্সপোর্ট, ডেটাবেস ডাম্প, সাবটাইটেল বা ওয়েবসাইটের কোড।

ঠিক করুন

  1. ফাইল টেনে আনুন বা লেখা পেস্ট করুন
  2. নিজে থেকেই ঠিক হয়ে যায়
  3. কপি বা ডাউনলোড করুন
অথবা ফাইল এখানে টেনে আনুন
  • কোনো আপলোড নেই। ফাইল আপনার ব্রাউজারেই ঠিক হয়, আপনার ডিভাইস ছেড়ে যায় না।

  • ইইউ-তে সার্ভার। Mojibuster চলে ফিনল্যান্ড-এর (ইইউ) একটি সার্ভারে, তাই ইউরোপের সাধারণ তথ্য সুরক্ষা প্রবিধান (GDPR) প্রযোজ্য। GDPR পড়ুন (EUR-Lex, ইংরেজি)

পড়ার সময় UnicodeDecodeError

pd.read_csv ধরে নেয় ফাইল UTF-8। ফাইল অন্য এনকোডিংয়ে সেভ হলে pandas UnicodeDecodeError: 'utf-8' codec can't decode byte দিয়ে থেমে যায়। পুরোনো বাংলা ফাইল প্রায়ই Windows-1252 (ANSI)-এ থাকে, বা বিজয়/SutonnyMJ ফন্টের ইংরেজি অক্ষরে। তখন এনকোডিং স্পষ্ট করে বলুন:

  • pd.read_csv('data.csv', encoding='cp1252') Excel ও Windows-এর পুরোনো ফাইলের জন্য।
  • encoding='latin-1' কখনো ব্যর্থ হয় না, কিন্তু € ও টাইপোগ্রাফিক উদ্ধৃতি ভুল পড়ে – সাধারণত cp1252 ভালো।
  • এনকোডিং জানা না থাকলে ফাইল Mojibuster-এ ফেলুন: সে শনাক্ত করে ফাইল UTF-8-এ সেভ করে।

DataFrame-এ বাংলার বদলে ব

DataFrame-এ বাংলা দেখালে UTF-8 ফাইল latin-1 বা cp1252 দিয়ে পড়া হয়েছে – অথবা ডেটা আগেই ভাঙা ছিল। প্রথম ক্ষেত্রে encoding='utf-8' যথেষ্ট। ডেটা নিজেই ভাঙা হলে একটি মানের জন্য value.encode('cp1252').decode('utf-8') কাজ করে, কিন্তু Windows-1252-এ অসংজ্ঞায়িত বাইট হারিয়ে গেলে, আর মেশানো ডেটায়, এটি ব্যর্থ হয়। সহজ উপায়: আগে ফাইল Mojibuster দিয়ে ঠিক করুন, তারপর পড়ুন।

pandas-এর CSV, BOM ছাড়া Excel-এ খোলা

আগে

bvg kni wefvM
iwng DwÏb XvKv
Kwig ‡nv‡mb PÆM«vg

পরে

নাম শহর বিভাগ
রহিম উদ্দিন ঢাকা
করিম হোসেন চট্টগ্রাম

to_csv: Excel-এ ফাইল ভুল দেখায়

df.to_csv('export.csv') BOM ছাড়া UTF-8 লেখে। Excel এমন ফাইল ANSI ধরে খোলে এবং বাংলা বাংলা হয়ে যায়। encoding='utf-8-sig' দিলে pandas BOM লেখে আর Excel UTF-8 চিনতে পারে। আরও: Excel ও CSV-তে বাংলা ফন্টের সমস্যা।

Windows-এ open()

open('file.txt') encoding ছাড়া Windows-এ সিস্টেম এনকোডিং ব্যবহার করে, সাধারণত cp1252। Linux-এ চলা স্ক্রিপ্ট Windows-এ একই UTF-8 বাংলা ফাইল ব হিসেবে পড়ে বা ত্রুটি দেয়। তাই সবসময় encoding='utf-8' দিন বা এনভায়রনমেন্ট ভ্যারিয়েবল PYTHONUTF8=1 সেট করুন। PEP 686 অনুযায়ী ভবিষ্যতের Python-এ UTF-8 ডিফল্ট হবে।

requests দিয়ে ওয়েব ডেটা

requests response.text ঠিক করে Content-Type হেডার থেকে। টেক্সট উত্তরে character set না থাকলে সে ISO-8859-1 ধরে নেয় এবং বাংলা UTF-8 পাতায় বাংলা দেখায়। আগে response.encoding = 'utf-8' দিন, অথবা response.json() ব্যবহার করুন যা UTF-8 নিজেই চেনে।

errors='replace' দিয়ে বাংলা নেই এমন এনকোডিংয়ে টেক্সট লেখা হলে ফাইলে ? থাকে – তখন তথ্য হারিয়ে গেছে, দেখুন মোজিবাকে কী।

সচরাচর জিজ্ঞাসা

এর জন্য কি Python লাইব্রেরি আছে?

হ্যাঁ, ftfy Python কোডে mojibake ঠিক করে। প্রোগ্রামিং ছাড়া একটি ফাইলের জন্য Mojibuster দ্রুত এবং সেভের আগে প্রতিটি পরিবর্তন দেখায়।

কোন encoding মান সবচেয়ে বেশি লাগে?

utf-8, utf-8-sig (BOM সহ UTF-8), cp1252 (Windows, পশ্চিম ইউরোপ), latin-1 ও utf-16। বড়-ছোট হাতের অক্ষর আর হাইফেন কোনো পার্থক্য করে না।

ডিলিমিটার ও সংখ্যা কি অক্ষত থাকে?

হ্যাঁ। Mojibuster শুধু ভাঙা অক্ষর বদলায়। কমা, উদ্ধৃতি চিহ্ন ও নতুন লাইন যেমন ছিল তেমনই থাকে।

আরও গাইড