跳转到内容

字体与 CJK 渲染:缺字、模糊与字体缓存

核验于 2 分钟阅读

文档为什么显示方块、怎么重建字体缓存,以及 ClearType 与缩放在哪里打架。

测试环境Pro (26H2) / Server · 版本号 26300.9457 / 26100.33650 · x64
E1
版本号
26300.9457 / 26100.33650
版本
Pro (26H2) / Server
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
排障

三种不同的问题都被叫作“字体问题”:

现象 原因
方块 / 问号 字体缺字形(缺 CJK 字体,或 PDF 里是子集字体)
文字模糊 非 DPI 感知应用的缩放,或点阵字体
字形形状不对 该脚本选错了字体(日文与中文变体)

修法各不相同。装“更多字体”只对第一种有帮助。

Windows 通过可选功能提供 CJK 支持:设置 → 系统 → 可选功能 → 添加功能 → 中文(简体)补充字体(繁体/日文/韩文同理)。

查看已安装:

终端窗口
Get-WinUserLanguageList | Select-Object LanguageTag,InputMethodTips
Get-ChildItem C:\Windows\Fonts -Filter *.tt? | Measure-Object
Get-WindowsCapability -Online -Name 'Language.Fonts.*' | Select-Object Name,State

如果PDF 显示方块而同段文字在浏览器里正常,说明该 PDF 嵌入的是缺这些字形的子集——问题在文档,不在 Windows。

同一个 Unicode 码位在不同字体里渲染不同:中文简体的「直」与日文的「直」形状有细微差异。你打的是中文,文档却像日文,说明字体回退选到了日文字面。

解法是在文档/应用里显式指定中文字体(Microsoft YaHei、SimSun、Noto Sans SC),不要依赖回退。

Windows 会缓存字体数据;缓存损坏会导致字体缺失、应用看不到新装字体,或“设置”应用变慢。

终端窗口
Stop-Service FontCache
Remove-Item "$env:SystemRoot\ServiceProfiles\LocalService\AppData\Local\FontCache\*" -Force -ErrorAction SilentlyContinue
Start-Service FontCache

之后重启。缓存会自行重建——字体密集的应用第一次启动会稍慢。

ClearType 是为 96 DPI 设计的。在 125–200% 缩放下:

  • DPI 感知的应用按新比例重新渲染 → 清晰。
  • 不感知的应用被位图拉伸 → 模糊。
  • 点阵字体(老安装程序、部分工具)根本无法缩放。

这与高 DPI 与缩放是同一机制,不是字体缺陷。高 DPI 下关掉 ClearType 只会让字变细,不会变清晰,也不能修好不感知的应用。

终端窗口
Add-Type -AssemblyName System.Drawing
$families = (New-Object System.Drawing.Text.InstalledFontCollection).Families
$families | Where-Object Name -match 'YaHei|SimSun|Noto' | Select-Object Name

字体族不在列表里,应用就用不了它——哪怕文件就在磁盘上。

E1。字体与文本渲染行为有微软文档依据。实验室虚拟机默认已装 CJK 字体,因此未复现缺字场景。

来源