字体与 CJK 渲染:缺字、模糊与字体缓存
文档为什么显示方块、怎么重建字体缓存,以及 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,InputMethodTipsGet-ChildItem C:\Windows\Fonts -Filter *.tt? | Measure-ObjectGet-WindowsCapability -Online -Name 'Language.Fonts.*' | Select-Object Name,State如果PDF 显示方块而同段文字在浏览器里正常,说明该 PDF 嵌入的是缺这些字形的子集——问题在文档,不在 Windows。
CJK 变体错位
Section titled “CJK 变体错位”同一个 Unicode 码位在不同字体里渲染不同:中文简体的「直」与日文的「直」形状有细微差异。你打的是中文,文档却像日文,说明字体回退选到了日文字面。
解法是在文档/应用里显式指定中文字体(Microsoft YaHei、SimSun、Noto Sans SC),不要依赖回退。
Windows 会缓存字体数据;缓存损坏会导致字体缺失、应用看不到新装字体,或“设置”应用变慢。
Stop-Service FontCacheRemove-Item "$env:SystemRoot\ServiceProfiles\LocalService\AppData\Local\FontCache\*" -Force -ErrorAction SilentlyContinueStart-Service FontCache之后重启。缓存会自行重建——字体密集的应用第一次启动会稍慢。
缩放下的模糊
Section titled “缩放下的模糊”ClearType 是为 96 DPI 设计的。在 125–200% 缩放下:
- DPI 感知的应用按新比例重新渲染 → 清晰。
- 不感知的应用被位图拉伸 → 模糊。
- 点阵字体(老安装程序、部分工具)根本无法缩放。
这与高 DPI 与缩放是同一机制,不是字体缺陷。高 DPI 下关掉 ClearType 只会让字变细,不会变清晰,也不能修好不感知的应用。
验证字体真的可用
Section titled “验证字体真的可用”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 字体,因此未复现缺字场景。