আসল সমস্যা: প্রতিটি কমান্ডের নিজস্ব এনকোডিং
Windows PowerShell 5.1-এ প্রায় প্রতিটি কমান্ডের নিজস্ব ডিফল্ট এনকোডিং আছে: Get-Content BOM ছাড়া ফাইলকে ANSI (Windows-1252) ধরে পড়ে, Out-File ও > UTF-16 লেখে, Set-Content ANSI আর Export-Csv ASCII। তাই UTF-8 বাংলা ব হয়ে যায় বা ? হয়ে যায়। PowerShell 7-এ সব এক হয়েছে – সবখানে BOM ছাড়া UTF-8।
আগে
evsjv‡`‡ki ivRavbx XvKv kni
পরে
বাংলাদেশের রাজধানী ঢাকা শহর
ফাইল ঠিকভাবে পড়ুন ও লিখুন
Get-Content data.csv -Encoding UTF8BOM ছাড়া UTF-8 ফাইলও ঠিক পড়ে।Set-Content,Out-FileওAdd-Content-এ-Encoding UTF8দিয়ে UTF-8 লিখুন – 5.1-এ সবসময় BOM সহ।Export-Csv data.csv -Encoding UTF8 -NoTypeInformationলিখুন; ASCII ডিফল্ট বাংলা অক্ষরকে?দিয়ে বদলে দেয়।- সব কমান্ডের জন্য একসঙ্গে: স্ক্রিপ্টের শুরুতে
$PSDefaultParameterValues['*:Encoding'] = 'utf8'।
Invoke-RestMethod ও Invoke-WebRequest দিয়ে ওয়েব রিকোয়েস্ট
সার্ভার Content-Type-এ character set না জানালে Windows PowerShell 5.1 উত্তরকে ISO-8859-1 ধরে ডিকোড করে। তখন বাংলা UTF-8 উত্তরে বাংলা-র মতো লেখা আসে। সমাধান: উত্তরটি বাইট হিসেবে নিন ও নিজে ডিকোড করুন, যেমন [Text.Encoding]::UTF8.GetString((Invoke-WebRequest $url).RawContentStream.ToArray())।
বাংলা অক্ষর থাকা স্ক্রিপ্ট ফাইল
স্ক্রিপ্ট UTF-8 BOM ছাড়া সেভ করলে Windows PowerShell 5.1 সেটি ANSI হিসেবে পড়ে। Write-Host "বাংলা"-র মতো স্ট্রিং তখন বাংলা হয়ে যায়। .ps1 ফাইল UTF-8 BOM সহ সেভ করুন – VS Code-এ স্ট্যাটাস বারের এনকোডিং থেকে, Notepad++-এ Encoding → UTF-8-BOM থেকে।
কনসোল
শুধু কনসোল উইন্ডোতে ? বা অদ্ভুত চিহ্ন দেখালে প্রায়ই ফাইল ঠিকই থাকে – কনসোলের ফন্ট বা এনকোডিং বাংলা দেখাতে পারে না। আউটপুট এনকোডিং বদলান [Console]::OutputEncoding = [Text.Encoding]::UTF8 দিয়ে। বাইরের প্রোগ্রামে পাঠানো আউটপুটের জন্য $OutputEncoding = [Text.Encoding]::UTF8-ও দিন।
ফাইল আগেই ভাঙা অবস্থায় লেখা হয়ে গেলে ওপরের বাক্সে ফেলুন: Mojibuster ব-র মতো অক্ষর ঠিক করে এবং ANSI ফাইলকে UTF-8-এ বদলায়। ফাইলে আগে থেকেই ? থাকলে লেখা হারিয়ে গেছে – মোজিবাকে কী দেখুন।
সচরাচর জিজ্ঞাসা
আমার PowerShell-এর কোন ভার্সন?
$PSVersionTable.PSVersion দেখায়। 5.1 Windows-এর ভেতরের Windows PowerShell; 7 থেকে শুধু PowerShell বলা হয় এবং ডিফল্টে UTF-8 ব্যবহার করে।
PowerShell থেকে বানানো CSV Excel-এ ভুল খোলে কেন?
PowerShell 7 BOM ছাড়া UTF-8 লেখে, যা Excel চেনে না। -Encoding utf8BOM ব্যবহার করুন বা Mojibuster-এ ফাইল BOM সহ সেভ করুন। আরও: Excel ও CSV-তে বাংলা ফন্টের সমস্যা।
chcp 65001 কি দরকার?
শুধু সেসব প্রোগ্রামের জন্য যারা কনসোল কোড পেজ অনুসরণ করে। PowerShell-এর ভেতরে [Console]::OutputEncoding-ই যথেষ্ট।