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

আপনার স্ক্রিপ্ট বাংলার বদলে বাংলা বা ? লিখছে, কিংবা কনসোলে লেখা ভাঙা দেখাচ্ছে? Windows PowerShell 5.1-এ প্রতিটি কমান্ডের এনকোডিং আলাদা। এখানে কারণ ও সঠিক প্যারামিটার আছে – আর ভাঙা ফাইল ওপরে ব্রাউজারেই ঠিক করা যায়।

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

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

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

ঠিক করুন

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

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

আসল সমস্যা: প্রতিটি কমান্ডের নিজস্ব এনকোডিং

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।

PowerShell 5.1-এ Get-Content দিয়ে পড়া UTF-8 ফাইল

আগে

evsjv‡`‡ki ivRavbx XvKv kni

পরে

বাংলাদেশের রাজধানী ঢাকা শহর

ফাইল ঠিকভাবে পড়ুন ও লিখুন

  • Get-Content data.csv -Encoding UTF8 BOM ছাড়া 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-ই যথেষ্ট।

আরও গাইড