name 表:名字是从哪来的
最后更新 2026-11-02
EN中文
本页目录
界面上显示的「字体名」不是从文件名来的,也不是从系统某处猜的——它来自字体文件里的 name 表。这张表是一串「编号 → 文字」的记录,编号规定了这条文字算哪一类名字。
这张表长什么样
结构很简单:
- 表头:版本号、记录条数;
- 每条记录:平台、编码、语言、编号(nameID)、长度、数据偏移;
- 后面是真正的字符串。
所以同一个名称可以有很多条记录:中文一条、英文一条、Macintosh 平台一条、Windows 平台一条。谁先被用上,取决于读它的程序怎么挑。
最常用的几个编号
| nameID | 含义 | 典型值 |
|---|---|---|
| 0 | 版权声明 | Copyright 2020 The Inter Project Authors |
| 1 | 家族名 | Inter |
| 2 | 子家族名 | Bold、Italic、Regular |
| 4 | 完整名 | Inter Bold |
| 5 | 版本串 | Version 3.019 |
| 6 | PostScript 名 | Inter-Bold |
| 13 / 14 | 许可证描述 / 许可证地址 | SIL Open Font License 1.1 + 链接 |
| 16 / 17 | 排版家族名 / 排版子家族名 | Inter / Bold |
| 21 / 22 | WWS 家族名 / WWS 子家族名 | Inter Bold 的另一种归类 |
1 + 2 与 16 + 17 的区别是这张表最容易被忽略的地方:老程序只认 1 和 2,于是「Inter Bold」这一款字体的家族名可能被写成 Inter Bold、子家族名写成 Regular;而 16 + 17 用来表达「它其实属于 Inter 这个家族,是 Bold」。前者是兼容,后者才是设计意图。
平台与语言
每条记录都带「平台 / 编码 / 语言」三件套。实践里最常遇到两组:
- Windows(platformID 3):编码 1 = BMP,10 = 全 Unicode;语言 0x0409 英文、0x0804 简体中文、0x0404 繁体中文;
- Macintosh(platformID 1):语言 0 英文,其余按 Mac 的语言码。
更老的字体还可能只在 Macintosh 平台写了名字,Windows 那一组只剩一条版权或许可证。只挑一个平台读到底会读不到名字,正确做法是按字段回落:优先想要的平台,没有就换下一个。
本地化名字与本站的「微软雅黑」
中文用户看到 Microsoft YaHei 会愣一下。这张表里本来就有中文记录(nameID 1 或 16 的中文条目),只是很多程序只取了英文。
本站把 nameID 1 / 16 的多语言条目存成 localizedNames,家族列表按界面语言显示本地名,把真名挂在悬停提示里。要注意的是:搜索、选中、收藏用的始终是真名(Microsoft YaHei),显示名只出现在界面上——否则同一个人搜「雅黑」和「YaHei」会得到两套结果。
三个常踩的坑
- PostScript 名有严格限制:不超过 63 个字符,只用 ASCII 33–126,且不能出现空格和
[](){}<>/%。它出现在 PDF 与系统字体缓存里,写错不会被某些系统拒绝,但会静静出问题。 - WWS 与 typographic 不是一回事:WWS(Weight / Width / Slant)是为了让程序按「粗细 + 宽窄 + 斜度」归类而设的;typographic 名保的是设计师的分类。两者不一致时,不同系统会显示不同的名字。
- 名字可以撒谎:
name表只是文本,没有校验。一个文件把家族名写成Arial也能存进去。所以本站的家族归并除了名字,还会参考别的字段。
本站怎么用它
- 家族列表与详情页的标题:
name的家族名(优先排版家族名,缺了用家族名); - 语言切换时的本地名:同一 nameID 的其它语言条目;
- 搜索别名:把本地名与常见中文叫法摊平成一张别名表;
- 字形数量等数字不在这张表,分别来自
maxp与OS/2。
延伸阅读
- OpenType 规范:
name表(含完整的 nameID 列表与平台编码表) - OpenType 规范:
name表「Naming」一节(WWS 与 typographic 名的取舍)