When people first learn about Unicode, it sounds like a finished story: one universal standard that finally lets every script on earth coexist in the same file, the same database, the same web page. And for the most part, it works remarkably well. But anyone who has tried to display Hindi, Tamil, Japanese, or Chinese text across different devices knows the reality is messier. Unicode solved many problems, yet it carries genuine limitations that surface the moment you move beyond simple Latin text. Understanding these problems matters for librarians, cataloguers, and information professionals who build multilingual catalogues, digital repositories, and metadata records every day.
Table of Contents
- A quick refresher on what Unicode actually encodes
- Challenges with CJK scripts
- Why the original 65,536 limit was a problem
- Han unification and its consequences
- Font rendering and compatibility issues
- When a font lacks the glyph
- The special difficulty of complex scripts
- Pan-Unicode fonts are not a complete answer
- Multiple representations and normalization
- Security and spoofing problems
- Why these limitations matter for information work
A quick refresher on what Unicode actually encodes
Unicode assigns a unique number, called a code point, to every character. The key word is character, not glyph. A code point is the abstract identity of a letter or symbol; a glyph is its visible shape drawn by a font. This separation is the source of both Unicode’s power and many of its headaches. The same code point can look very different depending on the font, the language setting, and the rendering engine used to display it.
It also helps to remember the scale involved. The first version of Unicode was designed to fit into 16 bits, which allowed only 65,536 possible code points. This was later expanded to a 21-bit space spread across multiple “planes,” supporting over a million theoretical positions. As of recent versions, roughly 150,000 characters have actually been assigned. That history of starting small and expanding later explains several of the problems described below.
Challenges with CJK scripts
The most discussed limitation of Unicode involves the CJK scripts, an abbreviation for Chinese, Japanese, and Korean. These languages rely on Han characters, which are ideographic rather than alphabetic. Instead of a few dozen letters, they use tens of thousands of distinct characters, and the full count of historical and regional variants can approach or exceed 100,000.
Why the original 65,536 limit was a problem
When Unicode was confined to 16 bits, those 65,536 slots had to cover every script in the world. Reserving enough space for the enormous Han repertoire while still leaving room for Latin, Cyrillic, Arabic, Greek, and the Indic scripts was simply impossible. The designers faced a hard choice: either abandon the 16-bit goal or find a way to compress the number of CJK characters. They chose compression, and that decision created one of Unicode’s most debated features.
Han unification and its consequences
The solution was a process called Han unification. Many Han characters share a common historical root across Chinese, Japanese, and Korean, even though each language draws them with slightly different strokes. The Unicode authors decided to treat these regional shapes as different glyphs of the same grapheme and assign them a single shared code point. This kept the character count manageable.
The trade-off is significant. Because a Chinese reader, a Japanese reader, and a Korean reader may expect visibly different shapes for the same code point, plain Unicode text cannot always indicate which regional form is intended. To display the correct shape, a system needs extra information about the target language, the script variant, and sometimes even the region. On a web page this is handled by the HTML lang attribute, but in a plain text file, a database field, or a poorly tagged catalogue record, that context is often missing. The result is text that is legible but typographically “wrong” to native readers, which is a real concern when a library is preserving culturally accurate documents.
It is worth noting that Han unification was not imposed only by Western engineers. The effort was driven by an international group including experts from China, Japan, Korea, and Vietnam, and the participating delegations agreed on the unification rules. The technical limitation, rather than cultural carelessness, is what produces the displayed inconsistencies today.
Font rendering and compatibility issues
Even when the correct code points are stored, Unicode cannot guarantee that text appears correctly on screen. Encoding a character and rendering it are two separate jobs, and the rendering step depends on the font, the operating system, and the layout engine. This is where many practical failures occur.
When a font lacks the glyph
A font only contains glyphs for a limited set of code points. If a document uses a character the installed font does not support, the system shows a fallback symbol, commonly the empty rectangle nicknamed “tofu,” or a question-mark box. The text is technically stored correctly, but the reader sees nothing meaningful. Older browsers were a notorious source of this problem; early versions of Firefox, for instance, failed to render Indic fonts correctly even when the fonts were installed, displaying blank boxes for many glyphs.
The special difficulty of complex scripts
The Indic scripts make the rendering challenge especially clear. Unicode encodes the underlying letters of Devanagari, Bengali, Tamil, and similar scripts, but these languages combine consonants and vowels into conjunct forms and half-letters that look nothing like the simple sum of their parts. As one practical explanation puts it, Unicode is an encoding for letters, not for the combined glyphs that readers actually see.
Producing the right shape is the job of the rendering algorithm and the font, not the code points themselves. A consonant followed by a virama (the halant sign) may trigger a half-form, a stacked ligature, or a repositioned vowel mark. The W3C documentation on Indic scripts notes that the outcome of a consonant-virama-consonant sequence varies according to the characters, scripts, and fonts involved. A consonant cluster like क् + क can become a single fused ligature, क्क. If the font’s glyph substitution and positioning tables are incomplete, the text breaks visually. This is why a Bengali page might render perfectly in one font and turn into a jumble in another, a problem Indian users have reported for years across different operating systems.
The same complexity defeats environments that assume one character equals one fixed-width box. A long-standing limitation is that terminal applications still struggle to render Indic and Arabic scripts because their character-cell grid, inherited from 1970s hardware, cannot accommodate contextual shaping and non-linear glyph fusion. For developers building command-line tools for Indian languages, this remains an unsolved frustration.
Pan-Unicode fonts are not a complete answer
One might assume a single font covering all of Unicode would solve everything. In practice, fonts that try to cover every script tend to do each one poorly. Typographic conventions such as serif and sans-serif do not map across scripts, and complex scripts need real layout work rather than a bare collection of glyphs. As one font discussion observes, many pan-Unicode fonts neglect the heavy layout requirements and are meant only as last-resort fallbacks, not for typesetting actual paragraphs. Quality multilingual work usually still requires script-specific fonts, which complicates the dream of one universal file that looks right everywhere.
Multiple representations and normalization
Unicode often allows the same visible text to be encoded in more than one way. A letter with an accent, for example, can be stored as a single precomposed code point or as a base letter followed by a combining mark. Both produce identical output, but their byte sequences differ. To make comparisons reliable, Unicode defines normalization forms that convert text into a consistent representation before it is matched, sorted, or searched.
For information professionals this is not a trivial detail. If a catalogue stores one author’s name in a composed form and a search query arrives in a decomposed form, a naive system will fail to match them even though they look identical. Search, sorting, indexing, and de-duplication in a multilingual library system all depend on consistent normalization, and getting it wrong leads to silently missing records.
Security and spoofing problems
The huge range of Unicode characters introduces risks that plain ASCII never had. Because over a hundred thousand characters exist, many of them look almost identical. Latin “A”, Greek alpha, and Cyrillic “А” share nearly the same shape but have different code points. The Unicode Consortium’s own security report explains that where two different strings can be represented by the same sequence of glyphs, they are called homographs, and these enable visual spoofing.
This is the basis of homograph attacks, where a fraudulent web address uses lookalike characters to imitate a legitimate one. Encoding itself has also been a source of vulnerabilities; the same security report notes that the original use of UTF-8 was open to a canonicalization exploit involving non-shortest encoding forms, which had to be forbidden in a later version. Normalization can be abused too, with attackers using characters that collapse into forbidden symbols to slip past input filters. For anyone managing a public-facing digital library or repository, these are concrete reasons to validate and normalize incoming text carefully.
Why these limitations matter for information work
None of this means Unicode is a failure. It is one of the most successful standardisation efforts in computing history, and it makes genuine multilingual content development possible at all. But treating it as a magic solution leads to poor design decisions. A catalogue that stores correct code points can still display tofu boxes to users with the wrong fonts. A repository that ignores normalization can fail to retrieve records that clearly exist. A digitisation project that does not record language and regional context can lose the typographic identity of a CJK manuscript. The lesson is that encoding is only the first layer; fonts, rendering engines, normalization, and language metadata all have to cooperate for multilingual text to truly work.
What do you think? If a library digitises a rare Japanese manuscript, should it rely on plain Unicode text, or invest in language tagging and script-specific fonts to preserve the original character shapes? And in your own experience with Indian-language websites or documents, how often have you seen text break into boxes or broken conjuncts, and what do you think caused it?
References
- https://en.wikipedia.org/wiki/Han_unification
- https://bugzilla.mozilla.org/show_bug.cgi?id=356049
- https://ask.metafilter.com/158756/Multilingual-font-translation-issues
- https://www.w3.org/2002/Talks/09-ri-indic/indic-paper.html
- https://thottingal.in/blog/2026/03/22/complex-scripts-in-terminal/
- https://www.johndcook.com/blog/2010/01/16/disappointing-state-of-unicode-fonts/
- https://unicode.org/reports/tr36/tr36-8.html

Leave a Reply