Han Unification in Unicode: A Technical Compromise with Cultural Impact
One of the most controversial decisions in Unicode's history is Han Unification: the assignment of a single code point to characters from Chinese, Japanese, Korean, and Vietnamese writing systems that are historically related but may have distinct forms in each language. The motivation was to conserve code space; the consequence was cultural and political friction that persists today.
The Problem Unicode Solved
Prior to Unicode, each of the major CJK encodings — GB2312 (Chinese), JIS X 0208 (Japanese), KS X 1001 (Korean), Big5 — had its own set of code points for thousands of shared characters. Mapping these together was technically necessary to fit all CJK characters into a unified standard, especially given the code space available in the early 1990s when Unicode was designed.
What Unification Means
The CJK Unified Ideographs block (U+4E00–U+9FFF) and its extension blocks contain characters that are considered semantically identical across scripts even when their traditional brush forms differ slightly. A character that appears with 14 strokes in Japanese may traditionally appear with 15 strokes in Chinese. Under Han Unification, these share one code point, with fonts responsible for rendering the locale-appropriate glyph.
The Controversy
Critics — particularly in Japan — argued that unified code points prevent correct rendering without font metadata. A Japanese user and a Chinese user viewing the same code point may expect different glyphs. The Unicode standard acknowledges this: the correct rendering requires language tagging (HTML lang attribute or CSS font-language-override) to select the appropriate regional variant font. Without this, some browsers default to one glyph and display it incorrectly for other locales.
Ongoing Additions
Unicode has continued adding CJK characters in extension blocks: CJK Extension A through K and beyond. As of recent versions, over 90,000 Han characters are encoded. You can browse CJK characters in our Unicode blocks reference and inspect their properties in the character browser.