字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian

字符的编码方式很多种 ,我们常用到的是ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian等。

想查看的话,可以用记事本新建一个txt文档,里面输入字符或汉字,然后用UltraEdit打开,按

CTRL+h,即可查看字符的编码值。

对于英文字符,ASCII编码方式就可以全部表示,只需要0-127这128个编码值。所以ASCII编码值小于0x80,

常见的ASCII码值如:0表示NULL,10表示'\n'换行,0x61表示‘a'等。

对于汉字,大陆地区的简体中文使用的编码方式是GBK,意思是国标扩展码。

香港和台湾的繁体字使用是BIG5。

大陆地区默认情况下,你新建的txt文档存储方式是ANSI,表示英文字符存储为ASCII值,中文和标点符号

存储为GBK值。

为了使全世界所有的国家的任一字符都有一个独一无二的编码值,产生了Unicode码。任一字符的Unicode

值都是唯一的,但是可以有不同的存储方式。UTF-8 、Unicode 、Unicode big endian都是Unicode的一种

存储方式。

比如:"ab中国"’,在记事本里另存为Unicode编码,查看编码值为

FF FE 6100 62 00 63 2D 4E FD 56

FF FE 表示是Unicode编码,'a'的Unicode值为0x0061,和ASCII码值相同,只是表示位数不同。

Unicode编码方式默认是little endian 存放方式。

如果是编码方式选择为Unicode big endian,则存放为

FE FF 00 61 00 62 4E 2D 56 FD

起始两个字节FE FF表示大端方式,大端方式只是存放顺序发生改变,值并没有改变。

下面看看UTF-8编码值

EF BB BF 61 62 E4 B8 AD E5 9B BD

EF BB BF 表示UTF-8编码

E4 B8 AD表示‘中’,UTF-8编码值需要转化为Unicode编码值才能知道其表示的字符。

1110 0100 1011 1000 1010 1101

0100 1110 0010 1101

4         E          2       D

转换方式:第一个字节E4的从最高位开始,出现0之前的1的个数,表示有几个字节来表示。这个1110100

0之前有3个1,表示用三个字节来表示。后面的字节的高两位10都是头部,去掉,然后按从高到低顺序组合起

就是Unicode值。

同一个字符的GBK的值和Unicode值是不同的,同样是上面几个字符,GBK编码方式存放值为:

61 62 D6 D0 B9 FA

'中’的GBK为0xD6D0,和Unicode码值0x4E2D不同。

以16*16汉字库为例,有区号和位号,每个区有94个位,D6对应区号,D0对应位号。假设一个汉字库的内存

映射起始位置为HZKmem,区号area=0xD6-0xA1,位号where=0xD0-0xA1,16*16点阵每一个汉字需要32个

字节表示,那么 ‘中’ 的点阵信息起始位置Buffer,从Buffer开始的32个字节表示了 '中',前两个字节显示为

第一行,依次类推。

Buffer=HZKmem+((0xD6-0xA1)*94+(0xD0-0xA1))*32

在文字显示的时候,如果是点阵显示,一般我们需要取出其ASCII码值和GBK编码值,然后英文到ASCII对应的

点阵取出。汉字的话根据GBK编码值到汉字点阵库中索引出点阵信息。英文字符和中文字符的判断可以通过

编码值来判断,英文字符编码值小于0x80,GBK编码值的第一个字节的最高位为1,所以第一个字节大于等于

0x80。

如果要显示矢量字体,字体大小可任意调整,可以显示不同的字体(楷书、隶书等),则需要用Unicode编码值

索引。

GBK值不可直接索引FreeType矢量字体,如果要想显示成矢量字体的话,需要建立GBK和Unicode之间的对应,

然后再索引。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值