字库是各种文字符号的集合库,每个国家有相应的字库标准,国际字符集标准为UNICODE。
中文字符集标准介绍
常用中文字符集有GB2312,GBK,GB18030,BIG5,Unicode
GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了682个其他字符。GB2312的出现,基本满足了汉字的计算机处理需要,对于人名、古汉语等出现的生僻字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。
GBK即汉字内码扩展规范,收录汉字21003个,其他字符883个。是当前非常常用的字符集,手机与电脑常采用GBK字符集,基本可以满足生僻字需求。
GB 18030收录了当前所有汉字,截止当前GB18030-2022版共收录汉字87887个。GB18030编码中有三个实现级别,其中一级实现27584较为常用。在银行系统、政府系统和医药系统等会特别要求使用。
Big5是使用繁体中文字符集标准,基本集收录5401个汉字,共收录13,060个汉字。通常应用于港台地区。
Unicode是国际字符集标准,收录了全世界的字库包括中文,并以Unicode编码格式排列。Uniocde也随着全球各地字库标准的更新定期更新版本。在一些服务于全球型的平台上通常会使用Unicode。如搭载安卓和苹果系统的手机,以及其相关衍生品如穿戴设备。
外文字库有日韩字库和拉丁文系、西里尔文系、希腊文系等字库,拉丁文主要是美洲及欧洲使用。西里尔文主要是东欧和外蒙古在使用。
每个国家都有自己的字符集编码体系,如日文用JIS0208或者SHIFT-JIS,韩文用KSC5605,类似于中文的GB码。但同时他们也都被收录于Unicode。
Unicode会以UTF-8或者UTF-16的格式通信。我们日常通讯经常使用的是UTF-8编码,Windows系统当中常用的是UTF-16编码以中文为例,一般一个中文字符在系统和通讯当中有3种编码类型
1):GB编码
2):UTF-8编码
3):UTF-16(通常意义的UNICODE)编码
这里我们以“啊”字为例,简述3种编码的区别,中文编码为GB编码,也叫做机内码。
"啊"的机内码0xb0a1,高字节是0xb0,低字节为0xa1,如果系统的编码为Simplified Chinese,机内码就是GB编码。UTF-8编码是UNICODE编码的一种编码方式,也是目前使用较广泛的一种编码方式,通常使用在通讯和一些常见的电子设备上面,“啊”字的UTF-8编码为E5 95 8A,一般3个字节的较多。UTF-16编码是UNICODE编码的五层模型第三层的一种编码方式,为双字节,一般用在WINDOWS一些文档中比较多,啊字的UTF-16编码为0x554A,UTF-8编码和UTF-16编码可以互相转换。高通字库使用UTF-16编码居多。
字库类型:字库分点阵字库和矢量字库。
点阵字库:点阵字库又称BitmapFont,可以理解为将字库变成了二值化图库保存起来。调用点阵字库,和调用二值化图原理类似,但点阵字库有编码和统一的尺寸。点阵字库的优势是占用主控资源小,调用方便,几乎任何设备都可以使用,因此适用于硬件资源有限的嵌入式硬件上。
矢量字库:矢量字库存储的并不是图形数据,而是矢量数据。MCU通过算法将矢量数据渲染成一个个矢量字库。因此对MCU资源有一定要求,但可以控制字的大小、灰度、笔画粗细等,其原理与SVG矢量图片是类似的。目前矢量字库最常用的格式就是TTF,一般应用于手机和电脑上,而嵌入式硬件上由于资源有限,一般使用高通LiteType矢量字库,相比TTF字库的内存开销降低了1~2个数量级,使得Arm-Cortex M0都有机会使用矢量字库。
字库实现方式(仅点阵字库)
由于矢量字库的制造难度非常大,而嵌入式大多使用点阵字库,这里着重介绍点阵字库的一些实现方式:
1、自制字库(很麻烦,规则参数复杂,设计风格理念考究,造字工程庞大,还需要自定义编码和调用算法,所以不建议)
2、取模软件(取模字库的原理是将TTF字库转换为点阵字库,会丢失灰度,因此会失真,美观度有所欠缺。如果要商用且对品质要求的应用,建议取模后修字,并且需要注意版权问题。目前市面上功能和使用体验较好的取模软件是GT-FontLab。)
3、使用商用字库(有版权和品质背书,字库品类比较全,提供调试算法,并且有技术支持。在手机及电脑端字库,方正和汉仪的商用字库比较知名。在嵌入式领域,高通字库比较知名。高通提供点阵字库,灰度字库和矢量字库,可以使用高通字库芯片或者在GT-HMI使用高通字库。其中部分字库在GT-HMI中可以免费使用。
结论