字符属性

字符属性

最后更新 2026-11-02

  • 字符属性
  • general category
  • script
  • 规范化
  • 字符名
  • 转义
EN中文
本页目录

点开一个字符,除了名字,还有一串属性。它们来自 Unicode 的字符数据库(UCD),不是字体里的东西——同一份属性适用于所有字体。

名字(Name)

每个已分配码位有一个正式名字,由规范给出,不能改:

  • U+0041 → LATIN CAPITAL LETTER A
  • U+4E2D → CJK UNIFIED IDEOGRAPH-4E2D
  • U+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