Why is my Bengali text broken?
Two things cause almost all Bengali text problems: mixing encodings, and the widespread belief that Avro is an encoding. Both are explained here, with the parts that actually bite.
The short version
Bengali text breaks because several different encodings are in active use at the same time, and software that expects one will happily display another as garbage. Fixing it means converting between encodings — there is no font setting that fixes this.
If you just want it fixed now, use the Bijoy to Unicode converter. This page explains what is actually happening.
What you are looking at
When Bijoy-encoded bytes are read as Unicode, each byte maps to whatever character sits at that code point in Unicode. The result is not random — it is completely deterministic, which is why the same broken text always looks identical.
The four things people conflate
| Name | What it actually is | Text you get |
|---|---|---|
| Unicode | The standard every modern system uses | Readable Bengali, everywhere |
| Avro | An input method, not an encoding. Its output is already Unicode | Readable Bengali — nothing to convert |
| Bijoy | A 1988 legacy encoding, still baked into government forms and print | Garbled in modern software |
| Boishakhi | An older legacy scheme, common in archived documents | Garbled, sometimes in a different pattern |
The mistake that causes the most confusion: searching for an “Avro to Unicode converter”. There is nothing to convert — text you typed with Avro is already Unicode. If Avro output looks broken, the bytes are almost always Bijoy. That is a rename problem, not an encoding problem.
How to tell what you have
- Boxes,
?marks, or Latin gibberish — legacy bytes being read by a Unicode-aware program. Convert from legacy. - A short Latin string like
bvAbw— that is Bijoy text. It looks like nonsense because it is a different alphabet. - Readable Bengali but wrong letters — usually Boishakhi or SomewhereIn. Try the other legacy converter.
- Plain English letters that mean nothing — raw Avro keystrokes, or text that was never translated. No converter will help.
Why some converters silently do nothing
A common failure: a converter has a Bijoy→Unicode button that quietly returns the input unchanged. You paste legacy text, press the button, and get the same garbage back — and the page still looks like it worked.
How to catch it in two seconds: paste a short known string, convert it, and check that the output is actually Bengali. If the output still contains the original Latin characters, the button is broken regardless of what the page claims.
This is worth doing before you trust a tool with a whole government form.
Converting a file, not a snippet
For long documents, conversion is only half the job — you also need the right
font. Once text is Unicode, it renders correctly in any Bengali-capable font
(Noto Sans Bengali, SutonnyMJ, Vrinda, or the
Nirmala UI that ships with Windows). On Linux, install
fonts-beng or fonts-noto-beng, or Chromium-based apps will show
tofu boxes even with correct text underneath.
For developers
If you are storing Bangla in a database, store Unicode, never Bijoy bytes. Bijoy looks stable until the day a customer needs it on a platform you did not test, at which point the data is unrecoverable without the original encoding recorded alongside it.
On Windows, Windows-1252 is the code page Bijoy text ends up in — the
same reason .doc files from old systems arrive as mojibake. Convert on import,
not on display.
Bidirectional and combining marks matter here too: Bengali vowel signs are combining characters, so code that assumes one character equals one visible letter will corrupt text. Bijoy additionally stores vowel signs before the consonant, so any round-trip through a naive implementation reorders them. This tool reverses that order on the way back, which is why a correct Bijoy round trip is the real test of a converter — not whether it produces some output.
সংক্ষেপে
বাংলা লেখা ভাঙা দেখানোর কারণ একই সময়ে কয়েকটি আলাদা এনকোডিং ব্যবহৃত হচ্ছে, আর সফটওয়্যার একটি এনকোডিং আশা করে অন্যটি পড়ে ফেলে গিজবিজ করে দেখায়। সমাধান হলো এনকোডিং রূপান্তর — কোনো ফন্ট সেটিং দিয়ে এটি ঠিক হয় না।
এখনই ঠিক করতে চাইলে বিজয় টু ইউনিকোড কনভার্টার ব্যবহার করুন। এই পাতায় আসলে কী ঘটছে তা ব্যাখ্যা করা হলো।
যা দেখছেন
বিজয়-এনকোড করা বাইটগুলো ইউনিকোড হিসেবে পড়লে, প্রতিটি বাইট যে অক্ষরে পড়ে সেটিই দেখায়। ফল একেবারে এলোমেলো নয় — একদম নির্দিষ্ট, তাই একই ভাঙা লেখা সবসময় একই রকম দেখায়।
যাদের ভুলে মানুষ গুলিয়ে ফেলে
| নাম | আসলে কী | যে লেখা পাবেন |
|---|---|---|
| ইউনিকোড | আধুনিক প্রতিটি সিস্টেমের মান | সব জায়গায় পড়ার উপযোগী বাংলা |
| অভ্র | ইনপুটমেথড, এনকোডিং নয়। ফলাফল ইতিমধ্যেই ইউনিকোড | পড়ার উপযোগী বাংলা — রূপান্তরের দরকার নেই |
| বিজয় | ১৯৮৮ সালের পুরোনো এনকোডিং, সরকারি ফর্মে ও প্রিন্টে এখনো ব্যবহৃত | আধুনিক সফটওয়্যারে গিজবিজ |
| বৈশিষ্ট্য | আরও পুরোনো পদ্ধতি, পুরোনো নথিতে পাওয়া যায় | গিজবিজ, কখনও অন্য রকম |
সবচেয়ে বেশি গুলিয়ে যাওয়া ভুল: “অভ্র টু ইউনিকোড কনভার্টার” খোঁজা। আসলে রূপান্তরের দরকার নেই — অভ্র কীবোর্ডে লেখা লেখা ইতিমধ্যেই ইউনিকোড। অভ্র ব্যবহারকারীর লেখা ভাঙা দেখালে বাইটগুলো প্রায় অবশ্যই বিজয়। এটি নামের সমস্যা, এনকোডিংয়ের নয়।
আপনার কাছে কী আছে তা বুঝে নিন
- বাক্স,
?চিহ্ন, বা লাতিন অক্ষরের গুঞ্জল — পুরোনো বাইট ইউনিকোড-সচেতন প্রোগ্রামে পড়া হচ্ছে। পুরোনো থেকে ইউনিকোডে রূপান্তর করুন। bvAbwটাইপ ছোট লাতিন স্ট্রিং — এটাই বিজয় লেখা। অর্থহীন মনে হওয়ার কারণ এটি সত্যিই একটি ভিন্ন বর্ণমালা।- বাংলা পড়া যায়, কিন্তু অক্ষর ভুল — সাধারণত বৈশিষ্ট্য বা সোমহোরইন। অন্য কনভার্টারটি চেষ্টা করুন।
- সাধারণ ইংরেজি অক্ষর, অর্থহীন — কাঁচা অভ্র কি-প্রেস, বা অনূদিত হয়নি। কোনো কনভার্টারে কাজ হবে না।
কিছু কনভার্টার নীরবে কিছুই করে না
একটি সাধারণ সমস্যা: কনভার্টারে বিজয়→ইউনিকোড বাটন আছে, কিন্তু সেটি ইনপুট অপরিবর্তিত ফেরত দেয়। আপনি পুরোনো লেখা পেস্ট করে বাটন চাপেন এবং একই গিজবিজ ফিরে পান — অথচ পেজটি দেখায় কাজ হয়েছে।
দুই সেকেন্ডে যাচাই করার উপায়: একটি ছোট পরিচিত স্ট্রিং পেস্ট করে রূপান্তর করুন, তারপর দেখুন ফলাফল সত্যিই বাংলা কিনা। ফলাফলে মূল লাতিন অক্ষর থাকলে বাটনটি ভাঙা, পেজ যা-ই বলুক।
সরকারি ফর্মের হিসাব রাখার আগে এটি যাচাই করা ভালো।
ফাইল রূপান্তর
লম্বা নথির ক্ষেত্রে রূপান্তর অর্ধেক কাজ — সঠিক ফন্টও দরকার। লেখা ইউনিকোড হওয়ার পর
যেকোনো বাংলা-সক্ষম ফন্টে সঠিক দেখায় (Noto Sans Bengali,
SutonnyMJ, Vrinda, অথবা Windows-এর Nirmala UI)।
লিনাক্সে fonts-beng বা fonts-noto-beng ইনস্টল করুন, নইলে
লেখা ঠিক থাকলেও উপরে খালি বাক্স দেখাবে।
ডেভেলপারদের জন্য
ডেটাবেসে বাংলা রাখলে ইউনিকোড রাখুন, বিজয় বাইট কখনও নয়। বিজয় স্থিতিশীল মনে হলেও যেদিন কোনো গ্রাহককে অপরীক্ষিত প্ল্যাটফর্মে দিতে হবে, সেদিন ডেটা ফিরিয়ে আনা অসম্ভব — মূল এনকোডিং না থাকলে।
উইন্ডোজে Windows-1252 হলো সেই কোডপেজ যেখানে বিজয় লেখা জমা হয় —
তাই পুরোনো সিস্টেমের .doc ফাইল গিজবিজ হয়ে আসে। ডিসপ্লের সময় নয়, ইমপোর্টের
সময় রূপান্তর করুন।
এখানে বিসর্মিপৃক্ষ ও যুক্তাক্ষরও গুরুত্বপূর্ণ: বাংলা কার-চিহ্নগুলো কম্বিনিং ক্যারেক্টার, তাই “এক ক্যারেক্টার মানে এক দৃশ্যমান অক্ষর” ধরে নেওয়া কোড লেখা নষ্ট করে। বিজয়-এ কার-চিহ্ন কনসোন্যান্টের আগে থাকে, তাই সরল রূপান্তরে অক্ষরের ক্রম গোলমাল হয়। এই টুল সেই ক্রম ফিরিয়ে আনে — তাই কনভার্টার আসলে কাজ করছে কিনা তার পরীক্ষা হলো বিজয়→ইউনিকোড→বিজয় গোলাকার ফেরৎ, কিছু একটা আউটপুট দেওয়া নয়।
Questions people actually ask
Is Avro the same thing as Bijoy?
No, and this is the single most common misunderstanding. Avro is a phonetic input method — you type English letters and it produces Bengali, and its output is already Unicode. Bijoy is a legacy encoding from 1988 that maps Bangla letters to its own code points. There is nothing to convert if your text was typed with Avro; there is plenty to convert if it is Bijoy bytes.
অভ্র কি বিজয়ের মতোই?
নয়, এবং এটিই সবচেয়ে সাধারণ ভুল ধারণা। অভ্র একটি ফনেটিক ইনপুটমেথড — ইংরেজি অক্ষরে টাইপ করলে বাংলা বের হয়, আর ফলাফল ইতিমধ্যেই ইউনিকোড। বিজয় ১৯৮৮ সালের একটি পুরোনো এনকোডিং, যা নিজস্ব কোড পয়েন্টে মানচিত্র বানায়। অভ্র কীবোর্ডে লেখা লেখায় রূপান্তরের দরকার নেই; বিজয় বাইটে রূপান্তর দরকার।
Why does my Bengali text turn into boxes or Latin gibberish?
Because the text is encoded as Bijoy (or another legacy scheme) and the software reading it expects Unicode. Each legacy byte then maps to whatever character sits at that code point in Unicode, which is why the output is deterministic and always looks the same. It is an encoding mismatch, not a broken font — installing a different font will not fix it.
বাংলা লেখা বাক্স বা লাতিন গুঞ্জলে পরিণত হয় কেন?
কারণ লেখাটি বিজয় (অথবা অন্য পুরোনো পদ্ধতিতে) এনকোড করা, কিন্তু সফটওয়্যারটি ইউনিকোড আশা করছে। তখন প্রতিটি পুরোনো বাইট ইউনিকোডে ওই কোড পয়েন্টের যে অক্ষর আছে সেটিই দেখায়, তাই ফলাফল নির্দিষ্ট ও সবসময় একই রকম। এটি ফন্টের সমস্যা নয়, এনকোডিংয়ের অমিল — অন্য ফন্ট বসালে ঠিক হবে না।
Is my text uploaded anywhere?
No. The entire conversion runs as JavaScript inside the page. Your text is never sent to a server, which is why it is safe to paste confidential drafts, client documents or anything under an NDA — and why the tool keeps working if your connection drops.
আমার লেখা কোথাও আপলোড হয় কি?
নয়। পুরো রূপান্তরটি এই পাতার ভেতরেই JavaScript দিয়ে চলে। আপনার লেখা কোনো সার্ভারে যায় না, তাই গোপন খসড়া বা ক্লায়েন্টের নথি নিরাপদে পেস্ট করা যায় — সংযোগ চলে গেলেও কাজ চলতে থাকে।
Why does my Bijoy text look like meaningless Latin letters?
Because Bijoy is a different alphabet as far as your software is concerned. A string like bvAbw is not corrupted English — it is correctly encoded Bengali. Once converted to Unicode it reads normally. That is also why converting Bijoy gives a short string back: it is one byte per character.
বিজয় লেখা অর্থহীন লাতিন অক্ষরের মতো কেন দেখায়?
কারণ আপনার সফটওয়্যারের কাছে বিজয় মানে সম্পূর্ণ ভিন্ন বর্ণমালা। bvAbw টাইপ স্ট্রিংটি ক্ষতিগ্রস্ত ইংরেজি নয় — সঠিকভাবে এনকোড করা বাংলা। ইউনিকোডে রূপান্তর করলে স্বাভাবিকভাবে পড়া যায়। রূপান্তরে ছোট স্ট্রিং ফেরত আসার কারণও এটাই — প্রতি অক্ষরের জন্য এক বাইট।
The output is Bengali but the characters are in the wrong order. Why?
Bijoy stores vowel signs before the consonant, not after, so আমি is stored as Avwg. A correct converter reverses that ordering on the way back. If yours does not, you get subtly wrong text that still renders — which is worse than obvious garbage because you may not notice. This is why a round trip is the real test of a converter.
ফলাফল বাংলা, কিন্তু অক্ষরের ক্রম ভুল। কেন?
বিজয় কার-চিহ্ন কনসোন্যান্টের আগে রাখে, পরে নয়, তাই আমি লেখা থাকে Avwg হিসেবে। সঠিক কনভার্টার ফেরার পথে সেই ক্রম উলটো করে দেয়। আপনারটা না করলে সূক্ষ্মভাবে ভুল লেখা পাবেন যা তবু দেখা যায় — যেটা স্পষ্ট গিজবিজের চেয়ে খারাপ, কারণ খেয়াল নাও করতে পারেন। তাই কনভার্টার আসলে ঠিক কিনা তার পরীক্ষা হলো গোলাকার ফেরৎ।
My text is already readable Bengali but wrong. What is that?
Usually Boishakhi or SomewhereIn rather than Bijoy. Those two legacy schemes overlap heavily with Bijoy, so a Bijoy converter sometimes produces readable output — but not always the right letters. Try the other legacy converter. Documents from old systems are often mixed, in which case converting twice can help.
আমার লেখা পড়া যাচ্ছে, কিন্তু ভুল। এটা কী?
সাধারণত বৈশিষ্ট্য বা সোমহোরইন, বিজয় নয়। ওই দুটি পুরোনো পদ্ধতি বিজয়ের সাথে অনেকটা মিলে যায়, তাই বিজয় কনভার্টার কখনো কখনো পাঠযোগ্য ফল দেয় — তবে সবসময় সঠিক অক্ষর নয়। অন্য পুরোনো কনভার্টারটি চেষ্টা করুন। পুরোনো সিস্টেমের নথি প্রায়ই মিশ্র থাকে, সেক্ষেত্রে দুইবার রূপান্তর করলে কাজ হয়।
Do I need to install anything?
Not for this tool. It is a web page and needs only a browser. Installing fonts matters separately: once your text is Unicode it needs a Bengali-capable font to render. Windows ships Nirmala UI; on Linux install fonts-beng or fonts-noto-beng, otherwise Chromium-based apps show empty boxes even when the text underneath is correct.
কিছু ইনস্টল করতে হবে কি?
এই টুলের জন্য নয়। এটি একটি ওয়েব পাতা, শুধু ব্রাউজার লাগে। ফন্ট আলাদা বিষয়: লেখা ইউনিকোড হওয়ার পর সঠিকভাবে দেখাতে বাংলা-সক্ষম ফন্ট দরকার। উইন্ডোজে Nirmala UI আসে; লিনাক্সে fonts-beng বা fonts-noto-beng ইনস্টল করুন, নইলে লেখা ঠিক থাকলেও ব্রাউজারে খালি বাক্স দেখাবে।
Do you have an API?
Not yet. The conversion engine itself is plain JavaScript and works offline once the page has loaded, so you can copy the engine into your own project if you need programmatic conversion. For a hosted API, check back later.
আপনাদের কি API আছে?
এখনো নেই। রূপান্তর ইঞ্জিনটি সাধারণ JavaScript, পাতা একবার লোড হলেই অফলাইনেও কাজ করে, তাই প্রয়োজন হলে আপনি ইঞ্জিনটি নিজের প্রজেক্টে নিয়ে ব্যবহার করতে পারেন। হোস্টেড API এখনো নেই।