字符属性
最后更新 2026-11-02
- 字符属性
- general category
- script
- 规范化
- 字符名
- 转义
本页目录
点开一个字符,除了名字,还有一串属性。它们来自 Unicode 的字符数据库(UCD),不是字体里的东西——同一份属性适用于所有字体。
名字(Name)
每个已分配码位有一个正式名字,由规范给出,不能改:
U+0041→LATIN CAPITAL LETTER AU+4E2D→CJK UNIFIED IDEOGRAPH-4E2DU+1F600→GRINNING FACE
名字是标识,不是描述:GRINNING FACE 只是这个名字,不代表任何具体长相。
控制字符没有名字(<control> 之类是占位),所以本站统计已分配时不算它们,见 区块与已分配。
general category:这个字是什么
两字母代码,分七大类:
| 大类 | 前缀 | 含义 |
|---|---|---|
| 字母 | L |
Letter |
| 标记 | M |
Mark(重音、变音符号) |
| 数字 | N |
Number |
| 标点 | P |
Punctuation |
| 符号 | S |
Symbol |
| 分隔符 | Z |
Separator(空格类) |
| 其它 | C |
Other(控制、格式、私用、未分配) |
细分的常用几个:
| 代码 | 含义 | 例子 |
|---|---|---|
Lu / Ll / Lt |
大写 / 小写 / 词首大写字母 | A / a / Dž |
Lo |
其它字母(汉字、日文假名等) | 中 |
Lm |
修饰字母 | ʰ |
Mn |
非间距标记(叠在别的字符上) | 组合重音 |
Nd |
十进制数字 | 7 |
Po |
其它标点 | ! |
Zs |
空格分隔符 | 半角空格 |
Cc |
控制字符 | 换行 |
Cf |
格式字符(不可见) | 零宽空格 |
本站侧栏在区块下面会给一张类别分布:这个区块里有多少字母、多少标点、多少符号。区块里是混的,所以给分布而不给一个假结论。
script:属于哪种文字
脚本(Script) 是这套字符属于哪种书写系统:Latin、Han、Hiragana、Greek、Arabic……
它与区块不是一回事:汉字分散在多个区块里(基本区、扩展 A–I、兼容区……),而一个区块里可能只有一种脚本。
脚本影响排版:
- 换行规则(中文按字断、泰文按词断);
- 字体选择(回退链常按脚本挑);
locl特性按语言换字形(见 GSUB / GPOS)。
组合类与规范化
é 可以是一个码位(U+00E9),也可以是两个(U+0065 + U+0301)。两者看起来一样,但字符串比较不等:
'é' === 'é' // false —— 一个是预组合,一个是组合序列
'é'.normalize('NFC') === 'é'.normalize('NFC') // true
Unicode 定义了四种规范化形式(NFC / NFD / NFKC / NFKD)。要比较用户输入、做搜索、存数据库,先 normalize('NFC') 是常规做法。
组合类的值(Combining Class)决定多个标记叠在一起时谁在上谁在下——这对排版引擎重要,对写业务代码通常不重要。
本站侧栏显示什么
点一个字符,右栏分两块:
区块那块:区块名、码位范围、已分配 / 区块大小、类别分布。
字符那块:
- 字形预览(载入字体后就是这个字体的字形);
- 正式名字(取不到时显示未知);
- 码位(十六进制);
- 在不在当前字体里;
- 转义表:HTML、CSS、JavaScript、
0x、\u{}、Perl、URL 编码各怎么写。
转义表看着琐碎,但它解决的是我要把这个字放进代码里这个具体问题——尤其是星平面字符(\uD83D\uDE00 这种代理对写法),手写很容易错。
延伸阅读
- Unicode 标准第 4 章(Character Properties)
- UAX #15(Unicode Normalization Forms)
- Unicode 官方:
UnicodeData.txt、extracted/DerivedName.txt