|
初学者容易有这样的疑问,直接使用用unicode不是更加方便么,为什么emWin使用的时候还有多一次转换,即我们操
作的时候是用的UTF-8编码字体,emWin的库函数会将这个编码再转换成unicode编码,然后从uncode编码的字符集中
获取相应的点阵数据。
============================================
Unicode编码
由于各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码。
基于此,国际组织决定着手解决这个问题,即重新弄一套包括了地球上所有文化、所有字母和符号的编码。他们打算
叫它"UniversalMultiple-Octet Coded Character Set“(通用多八位编码字符集),简称 UCS, 俗称"UNICODE"。
Unicode有两种编码UCS-2和UCS-4。UCS-2用两个字节编码,UCS-4用4个字节编码。
UTF-8编码
事实证明,对可以用ASCⅡ表示的字符使用UNICODE并不高效,因为UNICODE比ASCⅡ占用大一倍的空间,而对
ASCⅡ来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,
即UTF(Universal Transformation Format)。目前存在的UTF格式有:UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32。
============================================
那么问题来了,emWin中为什么不直接使用Unicode编码,而要使用一种转换形式。
1. 我个人认为,这个是最主要的原因,MDK和IAR的编辑器都不支持Unicode编码,仅支持UTF-8。
2. UTF-8编码相对于unicode编码的优势。
(1)UTF-8表示与ASCII字符表示是一样的,只占一个字节,解决了Unicode浪费空间的情况。
(2)与CPU字节顺序无关, 可以在不同平台之间交流。
(3)容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)。
|
|