author:
- luixiao1223
title: 字符显示问题与emacs设置
基础介绍
字符集
就是你需要显示字符的定义.所有中文字符可以组成一个字符集.26个英文字母也可以组成一个字符集.字符集的存在可以是一种说明.可以写在纸上.在数学上就是一个集合.集合里面有你所定义的字符.字符是这个集合的元素.仅此而已.
比如,unicode就是一种字符集定义.
字符编码
那么字符编码是怎么回事?你要把你定义的字符集记录存储在计算机里面就需要进行编码.将每个字符对应一串二进制.有了这个二进制编码.我们就能将一句话将一个句子.存储在计算机里面.
比如,UTF-8就是一种编码方法,可以把unicode字符串按照UTF-8的编码格式编码为一串二进制,并可以存储在计算机中.对于unicode字符集,可以采用不同的字符编码.比如UTF-16,UTF-32都可以用来对unicode字符串进行编码.将之转换成二进制字符串.
计算机如何显示一个文件
字符文件存储过程
- 你在编辑器中输入文字.这些文字组成一个字符串
- 你按下保存的时候,这些字符串会按照编辑器设置的编码格式比如(UTF-8).将这些字符一一编码为一串二进制.
- 这些二进制在添加必要的附加信息之后,被存储到磁盘中.
字符文件显示的过程
- 编辑器读取二进制文件
- 根据编辑器选择的解码方法比如UTF-8把二进制,解码的结果是类似于integer的index.这些index会和unicode字符集中的字符一一对应.
- 有了这些integer之后,我们就知道二进制串对应的unicode字符了.
- 编辑器显示这些字符(详情参看显示字符小节)
显示器显示字符
我们知道要显示的字符之后,如何在显示器上显示出人类能够理解的字符呢?这就要提到两种东西,一个叫做typeface,一个叫做font.
基础知识
typeface
这就是要显示的字形风格.比如Song,Yahei就是两种不同的字形.在字形设计人员眼里,字形是比字体更为纯粹干净的东西.它是一种艺术设计风格.
font
字体的信息更为明确,而typeface就是font里面的一个属性.font里面的typeface决定了这个字体的艺术风格.而font不仅有typeface这个属性.还有其他,比如高度,宽度,是否加粗等属性.可见,10pt的Song和20pt的Song是不同的font,但是他们却含有同样的typeface(Song)
显示器显示字符
编辑器解码出了字符的integer之后,会根据编辑器目前设置的font去查找integer对应的显示的字符图形,加上font定义的大小等信息.操作系统就能够渲染出字符的形状了.
显示的整个过程如下
+-------------+--------------+--------------+--------------+
| | | Font: | |
|Binary Code | Integer Index| Typeface | Display |
| | | Size(etc) | |
+-------------+--------------+--------------+--------------+
emacs字符显示
emacs中字符显示,比上面的过程稍微复杂一下.我们来看看原因.unicode字符集含有的字符非常多.而有的font在设计里面并没有那么多的character与unicode中的字符一一对应.如此以来,emacs里面就用了一种更为聪明的做法来处理这种情况.emacs会根据不同的unicode字符集范围,挂载不同的font.这样emacs就可以顺利的显示所有的unicode字符了.副作用是,可能会出现不同的字符高度不一风格不一.但是这些都是次要的.另外这些信息记录在fontset-default里面.如需要请查看这个emacs变量,来确定emacs的行为.