Hindi Text Not Showing? How to Fix Font and Encoding Issues
Step-by-step fixes for Hindi text showing as boxes, question marks, or gibberish on Windows, Mac, Android, and in browsers.
You receive a document, open a website, or get a message — and where Hindi text should be, you see empty boxes, question marks, or random English characters. This is one of the most common Indian language computing problems, and it has exactly four possible causes.
Symptom → Cause Quick Diagnosis
| What You See | Likely Cause | Fix |
|---|---|---|
| Empty boxes (□□□□) | Missing Devanagari font | Install font or update OS |
| Question marks (????) | Wrong character encoding | Change encoding to UTF-8 |
| Random English letters (like "uke Lrs") | Legacy font text (Kruti Dev etc.) | Install the legacy font or convert to Unicode |
| Partially broken text (some chars okay, some boxes) | Incomplete font (missing conjuncts) | Use a complete Unicode font like Noto Sans Devanagari |
| Garbled mix of characters | Double encoding | Re-encode from original source |
Fix 1: Missing Hindi Fonts (Empty Boxes)
This is the most common cause. Your system doesn't have a font that can render Devanagari characters.
Windows 10/11
Windows 10/11 should include Devanagari fonts by default, but they sometimes don't install with stripped-down or modified Windows installations.
- Settings → Apps → Optional features
- Search for "Hindi Supplemental Fonts"
- Click Add a feature → Install it
- Restart your browser/application
- Download Noto Sans Devanagari from Google Fonts (free)
- Right-click the .ttf file → Install for all users
- Restart your application
Mac
macOS includes Devanagari fonts out of the box. If Hindi text isn't rendering:
- Open Font Book (Applications → Font Book)
- Search for "Devanagari"
- If fonts are listed but grayed out, right-click → Enable
- If no Devanagari fonts exist, download Noto Sans Devanagari and double-click to install
Android
Android ships with Hindi font support. If you see boxes:
- Settings → System → Languages & Input → Languages
- Add Hindi (India) to your language list (you don't need to make it primary)
- This forces Android to download the Devanagari font pack
- Restart the app where text wasn't showing
Linux (Ubuntu/Fedora)
sudo apt install fonts-noto-core fonts-noto-extra
Or for Fedora:
sudo dnf install google-noto-sans-devanagari-fonts
Fix 2: Wrong Character Encoding (Question Marks)
This happens when text was saved in UTF-8 but opened as ASCII/Latin-1, or vice versa.
In a Browser
- Most modern browsers auto-detect encoding, but if Hindi shows as
????: - Check if the website specifies encoding in its HTML:
- In Chrome: three-dot menu → More tools → Encoding (if available in your version)
- If using an extension to force encoding, set it to UTF-8
In Notepad/Text Editors
- Open the file in Notepad (Windows 11) or VS Code
- Look at the bottom-right corner for the current encoding (ANSI, UTF-8, UTF-16)
- If it says ANSI, re-open with UTF-8:
In Microsoft Excel
Excel is notorious for mangling Hindi text, especially from CSV files:
- Don't double-click the CSV to open it
- Instead: Open Excel → Data → From Text/CSV
- Set File Origin to 65001: Unicode (UTF-8)
- Preview the data to confirm Hindi appears correctly
- Then click Load
In MySQL/Database
If Hindi data shows as ???? in your database:
- Check that the column uses
utf8mb4charset (notutf8which is actuallyutf8mb3) - Check that the connection charset is
utf8mb4 - Check that the client (phpMyAdmin, DBeaver, etc.) is set to UTF-8
Fix 3: Legacy Font Text (Random English Characters)
If you see something like uke Lrs or 'kf"k where Hindi should be — this is text typed in a legacy font like Kruti Dev, Shree Lipi, Chanakya, or Shusha.
These fonts map Hindi characters to English keyboard positions. Without the specific font installed, you see the underlying ASCII characters.
Quick fix: Install the legacy font- Identify which font was used (ask the sender, or try common ones)
- Download and install the font (.ttf file)
- In your document, select the text and change the font to the correct legacy font
- Copy the legacy-font text
- Use a Kruti Dev to Unicode converter tool online
- Paste the converted Unicode text back
- Now the Hindi will display correctly in any font
Fix 4: Incomplete Conjunct Rendering
Sometimes basic Hindi characters show fine, but complex conjuncts (like क्ष, त्र, ज्ञ, श्र) appear as broken sequences with visible halant marks.
This means your font has basic Devanagari characters but lacks the conjunct ligature tables.
Fix: Switch to a complete Unicode font:- Noto Sans Devanagari — Google's comprehensive font, excellent conjunct support
- Mangal — Windows system font, good for documents
- Lohit Devanagari — Linux default, solid conjunct support
- Tiro Devanagari — Google Fonts, beautiful for body text
Fix 5: Browser-Specific Issues
Chrome
- Update to the latest version (older versions had Devanagari rendering bugs)
- Clear font cache:
chrome://settings/fonts→ Reset to defaults - Disable font-override extensions that might block Devanagari
Firefox
- Settings → General → Fonts → Advanced → Under "Fonts for: Hindi", set a known Devanagari font
- Ensure "Allow pages to choose their own fonts" is checked
Safari (Mac)
- Usually works out of the box
- If not: System Preferences → Language & Region → ensure Hindi is listed
Preventing Hindi Text Issues
For content creators and developers — avoid these issues from the start:
When saving files:- Always save as UTF-8 (not ANSI, not UTF-16, not "Unicode" which means UTF-16 in Windows)
- In VS Code: bottom-right encoding label → Save with Encoding → UTF-8
- In Notepad: Save As → Encoding dropdown → UTF-8
- Add
as the first tag in - Serve files with
Content-Type: text/html; charset=utf-8header - Save HTML/CSS/JS files as UTF-8
- PDF preserves fonts and encoding — prefer PDF for Hindi documents
- If sending .docx, embed fonts: File → Options → Save → "Embed fonts in the file"
- If sending .txt, explicitly state it's UTF-8 encoded
- Use
utf8mb4charset andutf8mb4_unicode_cicollation (MySQL/MariaDB) - Use UTF-8 by default (PostgreSQL does this automatically)
Still Broken? Diagnostic Steps
If none of the above fixes work:
- Test with a known-good Hindi page: Visit any major Hindi news site (Dainik Jagran, Amar Ujala). If Hindi appears there but not in your document, the issue is with the specific file, not your system.
- Check the raw bytes: Open the file in a hex editor. UTF-8 Hindi text starts with bytes in the range
E0 A4 xxtoE0 A5 xx. If you see bytes in the range20-7E, it's ASCII/legacy font text.
- Try a different application: If Hindi doesn't show in Word but shows in Chrome, the issue is Word's font/encoding settings, not your system.
- Check for BOM (Byte Order Mark): Some UTF-8 files start with the bytes
EF BB BF. Some applications choke on this. Try saving without BOM.