汉字编码,转换和显示

来源:互联网 发布:淘宝一元购对暗号 编辑:程序博客网 时间:2024/05/17 21:44

一。汉字编码知识

1.汉字国标准码GB2312

   国标码就是国家标准汉字编码 ,一个汉字由两个字节组成 , 每个字节范围是0--94。

 

2.汉字机内码

   机内码简单的说就是你新建设个文本文档写上两个汉字“你好”,查看文件的十六进制数据是C4E3BAC3

0xC4E3是“你”的机内码,0xBAC3是“好”的机内码,而这两个机内码的高字节和低字节分别减去128其实就是国标码。

 

3.汉字区位码

 国标码中汉字及符号组成一个94行94列的二维代码表中。在此方阵中,每一行称为一个"区",每一列称为一个"位"。

也就时94个区,每个区有94个位。区位码顾名思意就是汉字在这个表中的位置。

而区位码是由汉字机内码的高字节和低字节分别减去128(0xa0)得到。

 

4.UNICODE码

   收入进国际UNICODE统一编码的所有国家的所有文字符号,都有唯一的编号。

 

余话:
  对应汉字国标码,英文的标准是ASCII码,由一个字节表示,范围0--255。

 

    机内码比国标码多了个128因为要与ASCII码区别开,如果你在文档里写“好A”,一查看文件有3个字节BAC341,其中汉字占两个字节,ASCII码占一个字节。

   你自己分得清楚汉字在前还是在后,但机器去识别的时候就会喊娘,到底是BAC3还是C341表示一个汉字啊,仔细一看,机内码是在国标码的基础上每个字节加128(0x80)得来的,也就是说表示汉字的两个字节中每一个都会大于0xa0,字节0x41不可能是汉字的机内码,所以BAC3表示汉字,41表示ASCII码英文字符。加128就是为了区别开。

 

 

二。WINCE字符编码转换和文字显示:

wince设备上输出字符是以UNICODE编码的。

如果要显示ANSI字符,需要用MultiByteToWideChar转换

MultiByteToWideChar  第一个参数表示所要转换字符的语言代码页编号 如874泰语

这个函数会通过windows/wince.cls这个文件查表来进行转换

但有个前提是,wince.cls中包含了874的转换表,所以必须在local代码页选项目中添加泰语874才能支持

该功能。

 

另一种办法就是自己作一个转换表codetable[],完成与MultiByteToWideChar类似的算法。

最后调用windows的写字函数。

 

显示ANSI字符的最后一种办法,就是不用windows的写字函数。

如果是英文系统没有中文的代码页,此时要显示非UNICODE的中文字符。

找到你能用的汉字矢量字库,由这些字符编码计算出每个汉字的区位码,根据区码位码到字库文件中查找矢量字形信息

用DC句柄画出这些点,直线,曲线,字就写成了。

原创粉丝点击