পড়ার সময় 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 দিয়ে ঠিক করুন, তারপর পড়ুন।
আগে
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 শুধু ভাঙা অক্ষর বদলায়। কমা, উদ্ধৃতি চিহ্ন ও নতুন লাইন যেমন ছিল তেমনই থাকে।