区块与「已分配」
最后更新 2026-11-02
本页目录
Unicode 给码位划了区块(block):一段连续的范围,配一个名字,比如「基本拉丁字母」是 U+0000–U+007F、「中日韩统一表意文字」是 U+4E00–U+9FFF。这份表在官方 Blocks.txt 里,目前三百多个(随版本增加)。
区块是行政分区,不是分类
区块只说明「这段码位归谁管」,不说明字符是什么:
- 同一个区块里可以有字母、数字、标点、符号;
- 同一个「类别」的字符可能散在几十个区块里;
- 区块之间还有空隙(不属于任何区块的码位)。
真正的「分类」是 general category(字母 / 数字 / 标点 / 符号 / 控制……)与 script(拉丁 / 希腊 / 汉字……)。它们与区块不是一回事。
未分配码位
区块是一个预留范围,里面不一定填满。典型的两个例子:
| 区块 | 范围 | 码位数 | 已分配 |
|---|---|---|---|
| 基本拉丁字母 | U+0000–U+007F |
128 | 95 |
| 中日韩统一表意文字 | U+4E00–U+9FFF |
20,992 | 基本填满,但后续版本还在往里加 |
Basic Latin 少掉的 33 个是控制字符(U+0000–U+001F 与 U+007F):它们在编码里合法,但没有正式名字,所以不算「已分配」。这也是本站覆盖率里那个数字是 95 而不是 128 的原因。
「已分配」到底怎么算
本站的口径是:有正式名字的码位。
具体做法:读 extracted/DerivedName.txt(Unicode 官方给的「推导后的名字」,CJK 那种 CJK UNIFIED IDEOGRAPH-4E00 已经帮你算好),再和 UnicodeData.txt 的 general category 合并成小段,最后统计每个区块里落在这些段内的码位数。
所以:
- 控制字符:有编码、无名字 → 不算;
- CJK 汉字:有推导出来的名字 → 算;
- 私用区:没有名字 → 不算;
- 代理区:不是字符 → 不算。
本站怎么显示
区块行上写的是 covered / assigned:这个字体在这个区块里,把「该有的字」画了多少。
进度条的宽度则是按区块大小算的。两个分母不同,看起来会有点反直觉:CJK 那种两万多码位的区块,条永远很短,但数字可能很好看。
为什么不统一用区块大小?因为对字体不公平:没人可能覆盖「未分配」的码位,用区块大小做分母只会得到一串个位数百分比,看不出差别。为什么不统一用已分配?因为那样就偏心那些「几乎全分配」的小区块,而且条会失去「这段范围里我占了多少地」的直观意义。
区块收藏
本站的收藏按区块收,不按单个字符:一个 CJK 区块两万多码位,逐字收藏既没用也存不下。收藏只记区块序号,具体内容每次都从服务端现取。
延伸阅读
- Unicode 官方:
Blocks.txt - Unicode 官方:
extracted/DerivedName.txt - Unicode 标准第 4 章(Character Properties)