无形之章9(1/2)
术语
字形和字体
不得不说font与typeface即是在英文中也有很多混用的地方,很难分清,现在通常被翻译为“字体”的font在传统印刷界是指特定尺寸、特定字重、字偶间距等信息的一种typeface,比如“尺寸14pt,字重为bold的helo公司的i-mode手机中的功能。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△最早的au絵文字
这篇15000多字的文章,可能是最全面的字体基础知识大全
△把文字和图形穿插日本自古就有:日本江户时代的判じ絵(画迷)
绘文字(emoji)是以一个字符表示一个图形的方式表达信息,每个绘文字(emoji)其本质是一个特殊字符,2010年10月发布的unicode6.0中首次把绘文字(emoji)编入其中,往后每次unicode更新几乎都会增加新的绘文字(emoji)。每个绘文字(emoji)字符虽然都有指定的意义,但是实际外观取决于使用的字体,而各个平台使用的字体并不相同:
这篇15000多字的文章,可能是最全面的字体基础知识大全
各个平台对的支持情况可以参考:caniemoji,各个平台上绘文字(emoji)实际外观可以查看:emojipedia。
要注意的是绘文字(emoji)和顔文字(かおもじ、emoticon、表情符号)是指定不同的东西,顔文字是指如:_(:3」∠)_^_^这样用普通字符组成特定外形来表达表情或动作的文本。其使用的是普通字符,而不是特殊的字符,所以顔文字有更好的通用性,是ascii艺术的一种形式。
dingbat字体与icon-font
虽然现在流行的绘文字(emoji)形式的图形字符起源于日本的手机,不过把图形用在字符中,早在数字时代之的印刷业就有了,活字时代就有用来装饰文本的fleuron(花边),后来也出现了dingbats(装饰符号、杂锦字体),其中最有名和使用最广的是1971年的zapfdingbats,在zapfdingbats中主要还是用在传统印刷品中的标志或装饰性符号,不过小圆脸表情已经出现了。而1990年随windows3.1发布的wingdings和后来发布的其web版本webdings(网页核心字体之一)有了更多现代的图形比如心型和眼睛。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△zapfdingbats(部分)
这篇15000多字的文章,可能是最全面的字体基础知识大全
△wingdings
dingbats字体也被称为pi字体,一般名字中带pi的就是dingbats字体。
而当今流行的icon-font技术就是他们的继承者,例如网页中常用的fontawesome、都是一种dingbats,这种技术可以方便的在网页或者文本构成的用户界面中加入图形标志,而且由于是字体,所以这是当前(支持svg等矢量图形显示技术的地方还不多)最方便的显示矢量图形的方式。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△iconfont
文本编码与unicode
对于了解字体来说文本编码标准是不得不认识的,尤其是对要制作或者修改字体的人来说。字体的一个字符对应一个编码(码点:codepoint),而编码对应字符集(characterset)里的一个“字”,字体的字符通过字符集与“字”相连。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△文本编码的流程
字符集与编码方式
像通常说的unicode、gbk、big5、shift_jis这些都是字符集,其主要作用是为字符集中的每一个“字”分配一个编码(码点:codepoint),要注意的有两点:
字符集里的每一个编码对应的是一个“字”而不是“字形”,也就是说一个“字”在不同的地区或标准中可能有不同的“字形”,但字符集中只能对其分配一个编码(除非相差过大,比如简化字),要显示其不同的“字形”要通过使用为不同地区或标准设计的字体来实现。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△同字异形。左边是简体中文的,右边是日文
字符集是为字分配一个编码(码点),而这个字存储到文件要再通过特定编码方式(encoding)来变成实际的二进制数据,这样做的意义在于能够使用不定长(为了节省空间)的编码。
举一个十进制的例子来说:有两个字,编码分别是1、15要存储的话,最简单的方式是存储为定长数据:01、15。之所以要定长是为了再次读取时不会发生混淆,比如如果直接不定长存储的话,读取10字符时,读到第一位1就以为读到是1了。1,15存储为110再读取就变成了1,1,5了。而要定长存储的话,就要浪费很多空间,所以要再经过一次编码,比如这个例子里可以用把1作为标志位,读到1就表明这是2位编码的字,要再度一位。这样把两个字编码为2、15,这样就能直接存储为215了,这比定长的0115要节省空间。这个过程就是编码方式(encoding)来决定的。实际上的encoding是根据二进制来处理的,上面的例子只是便于理解。
过去的字符集往往与编码方式相对应,比如gb2312就只使用euc-cn,这让我们可以忽略它的编码方式,或者说把编码方式看成是字符集的一部分,统称为编码标准,比如只说某个文本是用gb2312文本编码。而后来出现了可能会又不同的编码方式的字符集,unicode字符集就有utf-8、utf-16le、utf-16be等编码方式,这时就要区分字符集和编码方式了。用utf-8、utf-16等编码方式存储同一个字符,它们的数据可能是不同的,但是这些数据都唯一对应于unicode中的一个编码(码点:codepoint)。这本来容易理解,不过windows下用unicode来称呼utf-16le(应该是由于utf-16le是windows的内部unicode编码所以就这么称呼)这就造成了很多误解,让人以为utf-8是字符集。
这篇15000多字的文章,可能是最全面的字体基础知识大全
△windows用unicode直接代指utf-16le
代码页
代码页(codepage)是操作系统中管理各种编码标准的方法,每个代码页对应一种字符集和编码方式,比如unicode-utf-8的代码页是65001,gbk是的代码页是936。
代码页是实际编码标准到应用程序间的中间层,好处是通过改变代码页可以简单的切换系统默认支持的编码标准,而且便于更新编码标准,比如winodows3.1时代码页936还是对应的gb2312,而winodws95时已经代码页936就更新到对应gbk了,这样应用程序不需要修改就能支持新的编码标准。
windows中把当前系统默认代码页称为ansi。
gb2312、gbk、big5、shift_jis
gb2312是1980年制定的编码标准,gbk是对gb2312的扩展(k)增加了一些字符并保持向下兼容。
big5是台湾制定的编码标准,由于台湾使用繁体字,所以这是繁体地区最常用的文本编码标准。
shift_jis是日本最常用的文本编码标准。
目前中国大陆的标准是国家编码标准是gb18030。
unicode
上面的gbk、shift_jis等传统编码标准都只为一个地区使用所制定的,而unicode是目标为所有国家、地区、语言的字编入同一个字符集,所以其被称为统一码、万国码。
unicode使用平面(plane)来安排编码空间,每个平面分为256行,256列,即65536个字。共有17个平面。所以unicode共可以容纳约110万字(1,114,112),最大的编码是10ffff。目前unicode8.0已经所使用了12万字(120,737)。unicode是个还在不断不断更新扩充的标准。
unicode的平面分为基本平面bmp(basicmultilingualplane)和补充平面(也有翻译成辅助平面)smp(supplementarymultilingualplane),只有第一个平面是基本平面,也就是plane0,剩下的16个平面都是补充平面。
如上面所说unicode有多种编码(encoding)方式,utf-32、utf-16le、utf-16be、utf-8等,最常用的是utf-8,其基本平面的字符(主要是ascii字符)只要使用1个字节存储,而中文通常是占3个字节,少数要占4个字节。而utf-16编码第一平面的字符也要占2个字节,中文占2到4个字节。一般来说存储中文使用utf-16要比utf–8占有更少的空间。utf–16be和le有的只是字节序的差别,be是大端在前,le是小端在前。
此外历史上还有ucs-2、utf7等的编码方式,至今已经很少使用了。由于历史原因javascript内部使用的是ucs--2可看成是utf-16的字集。在没有补充平面(smp)字符前,utf-16与ucs-2所指的是同一的意思。但当引入辅助平面字符后,就称为utf-16了。现在若有软件声称自己支持ucs-2编码,那其实是暗指它不能支持在utf-16中超过2个字节的字符。对于小于0x10000的ucs码,utf-16编码就等于ucs码。javascript在ecmascript6之前就因为这个原因无法处理大于2个字节字符。
bom
bom是字节顺序标记(byte-ordermark),通常用在utf-16中标识文本的字节顺序,即区分utf-16le和utf-16be。后来在windows中被用作区分文本编码方式的标志:
这篇15000多字的文章,可能是最全面的字体基础知识大全
由于除了windows其他系统对bom的支持程度不一,所以在制作web用的文本时,不应该使用bom。
cjk
cjk是中日韩统一表意文字(cjkunifiedideographs),目的是要把分别来自中文、日文、韩文、越南文、壮文中,起源相同、本义相同、形状一样或稍异的表意文字,赋予其在uiso10646及unicode标准中相同编码。
字体格式
truetype
truetype是最常见的字体格式,后缀名为“.ttf”的字体就是truetype格式。truetype字体的轮廓使用的是二次贝塞尔曲线,
opentype
opentype可以说是truetype的扩展,opentype有和truetype一样的封装格式(sfnt),可以使用truetype的二次贝塞尔曲线的字体轮廓,也可以使用对曲线表现效果更好的三次贝塞尔曲线cff(postscripttype2)。
woff、eot
woff是w3c标准推荐的网页字体格式,其本质上是对truetype、opentype格式的压缩封装。eot是微软推出的网页字体格式,本质上是对opentype格式精简再封装,虽然eot不是w3c标准,但是由于eot出现的很早(ie4就支持了),为了兼容性(尤其是对ie),eot也是常见的网页字体·格式。
格式转换
本章未完,点击下一页继续阅读。