win32—字符编码

1.字符编码

因为计算机只能读懂0和1,而我们的语言有很多字母和符号,所以这个时候就引入了字符编码。

1)ASCLL编码:

针对英文字母的

2)ASCLL编码的扩展:GB2312或GB2312-80

《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是[GB 2312](https://baike.baidu.com/item/GB 2312)—1980。

GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码

把换算成十六进制的区位码加上2020H,就得到国标码。国标码加上8080H,就得到常用的计算机机内码。1995年又颁布了《汉字编码扩展规范》(GBK)。GBK与GB 2312—1980国家标准所对应的内码标准兼容,同时在字汇一级支持ISO/IEC10646—1和GB 13000—1的全部中、日、韩(CJK)汉字,共计20902字。

这种扩展的编码容易存在乱码的问题,因为不同的国家有自己国家的编码。

3)UNICODE

什么是UNICODE?

​ 这是一个编码方案,换句话说就是一张包含全世界所有文字的编码表。

​ UNICODE编码范围是:0-0x10FFFF,可以容纳100多万个符号。

UNICODE的问题:

​ UNICODE只是一个字符集,它只是规定了符号的二进制代码是什么,但是没有规定这个二进制代码该如何存储

4)如何存储UNICODE:UTF-16/UTF-8是UNICODE的实现方式

UTF-16

​ UTF-16编码是以16位无符号整数位单位,注意是16位为一个单位,不表示一个字符就只有16位。这取决于unicode编码处于什么范围,有可能是2个字节,也有可能是4个字节。现在机器上的unicode编码一般指的是UTF-16

UTF-8
UNICODE编码(16进制)UTF-8字节流(二进制)
000000-00007F0xxxxxxx
000080-0007FF110xxxxx 10xxxxxx
000800-00FFFF1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

那么为什么有UTF-16了还出现了UTF-8呢?这跟这两个的大小有关,比如一个符号,你用一个字节就可以存储,但是如果你用UTF-16那你最小被分配2个字节,如果这是在自己硬盘上没什么,不过是多用点空间,但是如果是在网络中传输,本来2k的数据,你要传输4k,这就造成了数据传输的弊端,为了解决这种弊端,出现了UTF-8(变长的存储方案,你多大,就给你多大的空间)

两者优缺点:

UTF-16:
优点:容易解析
缺点:占空间
UTF-8:
优点:占空间更小
缺点:不容易解析

BOM(Byte Order Mark):

UTF-8EF BB BF
UTF-16LEFF FE(小端存储)
UTF-16BEFE FF(大端存储)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值