27、GB2312与UTF8编码详解

编码历史

一、ASCII编码

一开始,美国人发明字符的时候,只考虑了键盘上有的一些字符(英文字母、一些特殊符号)。
也就是ASCII编码。

怎么表示的呢?一共只有不到127个字符,所以一共字节就足以表示了。

ascci 一个字节,第一个比特位为0 ,0-127个字符

但是,比如传到中国,常用汉字就有3000多个,就要扩充字节了。

二、GB3212

最开始,用两个字节,规定两个字节都不占用0-127位的比特位,
也就是说,能用的第一个字节有效值范围为129-255,第二个也是129-255
那么可以表示的字符就多了一些,并且避免跟ASCII混淆。

但是,还有很多偏僻字,特殊字符呢?

再增加字符个数呗。

三、GBK编码

相对于上一个编码,GBK也是两个字节,不过其中第二个字节可以占用0-127位,也就是说,第一个字节范围十进制数是129-255,第二个字节是0-255的。这样理论上就可以表示很多的字符,足够挥霍了。
(而实际上,GBK是第一个字节128-255,第二个字节是65-255的)。

例题:判断编码是GBK还是ASCII。

比如,对于148,35,65,149,66连着的,判断中英文。

GBK中,第一个字节一定是大于128的(一定不是小于128的)。
所以可以判断,148,35是一个中文,65是一个英文,149,66是一个中文。所以上面就是“中文字,字母,中文字”

平时我们看到的ASII编码,代表本地编码。比如,在中国ASII代表的就是GBK编码规则。在日本代表的就是JIS编码。

四、编码规则多,就不兼容了

世界各国的语言不尽相同,那么字符集也就不相同,对于GBK编码好的文档,到日本用JIS去解码,就肯定是乱码了。
也就是兼容性不行。

类似于各国之间的交流,我们需要一个通用的大家都能理解的语言来统一编码,统一解码。于是就有了Unicode编码。

五、Unicode编码

Unicode一共有4个字节,编码有40多亿中方式,足够用了。
unicode是包含了世界所有通用的字符集,每个编码就是一个特定的标号,规定死了。

但是,随之而来也有一个问题,Unicode确实能够解决兼容性问题,但是我们平时用不到那么多字符的啊。比如我们最常用的字符,都集中在前面的65535个字符中。
也就是说可能平时2个字节就够用了。

如果一直用Unicode负责分配编号,用4个字节来分配编号。会存在浪费空间缺点。

于是,有人提出,让Unicode负责编号,用一个规则在不改变Unicode编号的基础上,简化字节。
比如:

上图中,把高位浪费的0值,用一定的规则舍弃,节省了空间。

这种简化方式(也就是规则)有几种,其中最出名的是Unicode转换格式(Unicode Transformation Format,简称为UTF)

在UTF中,比较出名的就是UTF-8.
Unicode与utf-8的关系,就像是原文件与压缩文件的关系。


问1、:给定Unicode字符,能不能得到utf-8的二进制值?
答:肯定能。

问2、:utf-8能反推出Unicode字符吗?
答:能。

二者就是一个编码与解码的关系。

问:utf-8占用几个字节呢?
答:首先,是不可能定长的。(否则没法压缩)。是变长的,1-6个字节。

utf-8与Unicode之间的转换关系

那么,对于变长来说,如何确定字符的边界?
也就是说,你怎么确定哪几个字节与特定字符之间的关系。?

比如,23,179,234,123这几个字节,哪几个代表一个字符?

还是如上图,对于最高位的字节,如果有两个1,就是2个字节,三个1,就是3个字节。。。以此类推。

六、乱码的问题

6.1、乱码是怎么形成的?

  • 1、解码时,与实际编码不一致。
    原因:比如,文本是utf-8,但是偏告诉解码器是GBK,所以就乱码了。
    解决办法:碰到这种情况,只需要让编码与解码一致就可以了。
  • 2、传输过程中,导致字节丢失,不可修复
    比如,对于utf-8的字节(容量比较大),非要转成GB2312(容量比较小)进行传输,导致字节丢失。
    解决办法L不可修复

6.2、怎么解码utf-8?

那么主要的问题来了,如何截取utf-8(各国语言都有),并且无乱码?
(也就是说,正确的划分23,179,234,123这几个数字,并且没有乱码)

答:从头开始,取第1个字节,通过位运算,计算连续的1的个数。
如为0,则截取第一个字节
如为N,则截取第N个字节


问3:GBK中文,经常在java中,被转为utf-8,是怎么转的?
答:通过Unicode中间转换。(GBK也是和Unicode有关系的,先转成Unicode,再转成utf-8)


铺垫完成,接下来,就是学习在MySQL中如何设置字符集了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容