hzk组合_2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)

本章主要内容如下:

1)熟悉ASCII/GB2312/Unicode编码

2)写应用程序,使LCD显示汉字和字符

大家都知道,数据传输的是二进制,而字符和汉字却有各种各样的,所以便通过二进制将字符和汉字编成一个字符集(charset).

1.而字符集(charset)又经历3个阶段

ASCII码

最早的计算机采用ASCII码,一个字节便包括了英文数字这些符号

GB2312编码

由于不支持中文,那时候的常用汉字就有6763个,所以中国人发明了GB2312(GB国标),汉字为2个字节,与ascll码兼容,后来又继续扩展汉字,所以又有了GBK编码.

GB2312编码是将字符进行一个分区处理,共有94个区,每个区有94个位,所以区位码范围为0000~9393

汉字分为了一级汉字(常用)和二级汉字(不常用).

其中GB2312分区表如下图所示:

比如“啊”,位于第16区第1位,也就是1500.

然后分别在区和位上加0xA1,便转换为了GB2312编码(编码从0xA1A1开始是为了兼容英文字符,)

所以“啊”的GB2312编码为: 0xB0A1

15(区)+0xA1=0xB0

00(位)+0xA1=0xA1

这种编码方式仅仅在中国行的通,若去浏览繁体字或日文时,便会出现乱码,因为繁体字使用的是Big5编码,日文则需要安装日本的Shift_JIS 编码才行.

在不同的国家的编码标准都不同,所以在PC里,使用ANSI编码来代表它们,比如中文PC里,ANSI编码代表GBK编码.

Unicode编码(统一世界所有符号)

包括中、日、韩、英文等字符,格式有utf-32、utf-16、utf-8

在PC,Unicode一般代表utf-16,而utf-8是单独列出来的,

utf-32

指每个字符都采用4个字节(32位),缺点在于浪费空间,比如:a=0x0000 0061,啊=0x0000554A.

utf-16(错一个字节,则整个乱码)

每个字符的长度为2字节或4字节,常用的都是2字节(包括汉字等).比如: a=0x0061,啊=0x554A.

utf-8(容错能力高)

指每个字符的长度为1~4个字节,越常用的字符,字节越短,比如:a=0x61,啊=0xE5958A

可以通过utf-16转换过来,高4位表示有多少个字节,然后剩下的每个字节的高2位都为10(表示只有一个字节),剩下的值加起来就是utf-16编码,如下图所示:

如果是unicode转utf-8,则对应代码为:

int UnicodeToUtf8( unsigned short* src, unsigned short*putf8)

{int len = 0;while (*src)

{if (*src < 0x80) //one byte

{

putf8[len++] = *src;

}else if (*src < 0x800) //two byte

{

putf8[len++] = 0xC0 | (*src >> 6);

putf8[len++] = 0x80 | ((*src) & 0x3F);

}else{

putf8[len++] = 0xE0 | (*src >> 12);    //获取src高4位

putf8[len++] = 0x80 | ((*src >> 6) & 0x3F); //获取src 第6位,长度为3f(6位)

putf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值