如果是针对大段正文来显示指定的中文字体,那么可以采用前面说到的3500字符集或者6500的字符集,基本上常用汉字已经足够概括了,这样定制下来的中文字体一般在1~2M之间,属于能接受的范围。

但是有时候对于一些特定的字符(比如logo,比如某一句话),其数量比较少,如果采用上面的哪怕是3500的子集,那就属于浪费。因为大量的字符排不上用场还拖慢了显示速度。这时候可以直接来创建一个仅包含指定文本数量的子集。其实上面的3500和6500也是这样的原理,只不过其包含的指定文本更多而已。那么问题的关键就是找到我们需要显示的这些指定字符的unicode UTF-16BE 集。

所以,先建立一个文本文件,随便命名,然后到:https://symbl.cc/cn/ 这个站点,查找你想要的汉字,选择“中日韩象形文字”的集合范围,在下面的结果中复制css代码,如\6C49,将首位的\删除,保留四位字符,添加到新建的文本文件,每行一个汉字对应的代码,譬如要指定:开天辟地,那么第一行就为开的四位unicode码,第二行就是天的,依次类推。每行的顺序不重要。

推荐字符集站点:https://www.qqxiuzi.cn/bianma/zifuji.php 这个站点可以连续输出unicode(UTF-16BE 集),然后用正则表达式(….)替换为$1\n,一次性搞定,速度更快。

需要注意一个地方,就是如果涉及到繁体字体,一般繁体字体对应的实际上还是简体字的code,不过字形表现为繁体的笔画,实际上并非真正的繁体code对应的文字,那么如果有的简体字会对应多个繁体字,如[发]对应的[髪]和[彂]两个繁体,现在大多的简体字体中发的繁体字形多数是表现为彂(也就是彂财的彂),那么如果需要使用头发的[髪]的话,那么需要输入真正繁体的髪,找到真正的code,要不然显示的大部分繁体字体都输出为彂。所以如果要表现为繁体的话,那么建议用简体输入后,用繁体字体显示一下,看看内容是否正确,如果不正确,那么就输入真正的繁体再用该字体输出一下(有些时候部分字体并不收纳这些真正的繁体code,那么这个字体在这种情况下实际上就没有用。)

完成后保存该文本文件,然后利用前面说的pyftsubset根据原始的ttf文件创建新的subset.ttf,然后将该ttf转换为woff2(如果数量很小,这种转换意义不大,因为这个ttf的字体已经很小了,字数十来个的话一般也就几K大小,当然转换也是可以的)。然后在css中定义@font-face,class或者style直接引用。

这个显示的速度就非常快了。

1:上面txt文件可以采用 # 空格 来作为注释行;
2:可以用-来表示区段,比如 0000-00FF 表示拉丁字母集合。