关闭

Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别

标签: C++
1092人阅读 评论(0) 收藏 举报
分类:

1.ascII码。

0x0*******; 总共127个。 有英文字母和符号。


好吧,问题来了。英文够用了,其他不够用啊。于是用两种方法解决: 

a)GB2312 GBK 这一类的编码方式,用两位(2的16次方中变幻)来表示中文字符。 兼容ASC2

b)   Unicode编码。 世界上一切所有的字符(各个国家,各种字符)都囊括进来了,用两个字节(16位)来表示。UTF-8,UTF-16,UTF-32都属于Unicode编码,他们是Unicode编码的表现形式。


2.GB2312/GBK

聪明的中国人发现 asc2码表示不了中文后,就扩展了位数。所有的汉字字符都用2个字节(16位)表示。

于是先有了 GB2312。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。

然后发现还是有些没有包括进去,就又出现了GBK。GBK向下兼容GB2312和ASC2,他是GB2312的升级版。‘

GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。


3.Unicode

Unicode 做的跟国人GBK做的类似。但是格局更大。 GBK是收录了绝大部分汉字,部分阿拉伯符号,部分俄文,部分希腊字母等等。

Unicode收录的是全世界所有的文字和符号。 Unicode和ASC2兼容,但是与GB2312,GBK都不兼容。

所以世界上所有的符号都能用两个字节来表示。


这时候,中国人开心了,英文国家的人就不开心了。本来他们用asc2好好的,每个字符用一个字节表示,现在得用两个字节表示,这将占用带宽和硬盘呢。

于是他们基于Unicode发明了 UTF-8编码。


UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。这样就形成了如下的UTF-8标记位:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...


这样,UTF-8存储英文时只用占用一个字节了。省!


接下来说说 UTF-16,

UTF-16没啥好说的,就是所有字符用两个字节,16位来表示。(但是要分大端对其还是小端对其)

UTF-16就是把Unicode码搬过来,简单无脑,只是会多费点空间。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11757次
    • 积分:322
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:17篇
    • 译文:0篇
    • 评论:0条
    文章分类