Japanese kanji look Chinese in my PDF: fixing Han glyph variants

Quick answer

Chinese, Japanese and Korean share Unicode code points for most Han characters, but each region draws some of them differently. A PDF tool that picks a Chinese font for Japanese text (or the reverse) shows the wrong forms. Fix it by choosing a font for the document’s language, or by marking passages with lang="ja" / lang="ko" so the tool can switch fonts.

Symptom

The characters 直 骨 角 化 海 説 写 次 今 令 in Noto Sans SC, TC, JP and KR
Same characters, four regional fonts (Noto Sans SC, TC, JP, KR). Compare 直, 骨, 角, 化 and 令.
Pandoc output of Japanese text with Microsoft YaHei and with Yu Gothic
Japanese text exported with Pandoc + xelatex: CJKmainfont="Microsoft YaHei" (Chinese forms) vs "Yu Gothic" (Japanese forms).

Cause

Unicode “unified” these characters, so the character code does not say which regional form to draw; the font decides. When a document has no language information, tools fall back to whatever CJK font comes first: often a Chinese font on Chinese systems, or the font set for the whole document.

Open a Japanese sample with the Japanese font

Open the Japanese sample

Fixes in the original tool

  • Pandoc + xelatex: set the font for the document’s language, e.g. -V CJKmainfont="Yu Gothic" (Windows), "Hiragino Sans" (macOS) or "Noto Sans CJK JP" for Japanese. Tested: switching from Microsoft YaHei to Yu Gothic changed the forms as shown above.
  • HTML/Chromium-based tools (tested with md-to-pdf; VS Code Markdown PDF and Typora also render with Chromium/Electron but were not tested): mark the language. With <span lang="ja">…</span> or <html lang="ja">, Chromium picks a Japanese fallback font; md-to-pdf rendered our lang="ja" line in Japanese forms. Or set font-family with the regional font first.
  • Mixed documents: put each language in its own lang span (or, in LaTeX, use separate font families per language).
日本語の段落:<span lang="ja">直 骨 角 化</span>
中文段落:<span lang="zh-CN">直 骨 角 化</span>

In MarkPDF

Choose the font for your document’s language in ⚙ Settings (Japanese, Korean, Simplified or Traditional Chinese). Passages marked with lang="ja", lang="ko", lang="zh-TW" or lang="zh-CN" switch to that region’s Noto font automatically, in the preview and in both PDF types.

Frequently asked questions

Is this a bug in Unicode?

No. Han unification is by design; the language tag and the font select the regional form.

Which characters differ?

Many, usually in small strokes: 直, 骨, 角, 化, 海, 令, 次, 写, 今 are easy to spot. Readers notice the wrong forms even when each one looks minor.

Can one font show all regional forms?

Pan-CJK fonts such as Noto Sans CJK / Source Han Sans contain all forms, but they still need the language tag (or the regional font name) to pick the right one.

Related guides