竹笋

注册

 

发新话题 回复该主题

python入门教程之python字符编 [复制链接]

1#
本节重点:

使学生掌握彻底掌握字符编码之前的转换关系

掌握python2vspython3上编码的区别

掌握python2和3上bytes,str的区别

本节时长需控制在60分钟内

注,本节有些地方可能不太容易理解,建议对照”第2章-字符编码转换“部分视频好好看2遍

编码回顾

在备编码相关的课件时,在知乎上看到一段关于Python编码的回答

这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把。不过感觉这哥们的答案并没把编码问题写明白,所以只好亲自动笔了。折腾编码问题,有很多次,我以为自已明白了,最终发现,那只不过是自圆其说而已,这一次,终于%确定,动笔即不再改!看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况

ASCII占1个字节,只支持英文

GB占2个字节,支持+汉字

GBKGB的升级版,支持20+汉字

Shift-JIS日本字符

ks_c_-韩国编码

TIS-泰国编码

由于每个国家都有自己的字符,所以其对应关系也涵盖了自己国家的字符,但是以上编码都存在局限性,即:仅涵盖本国字符,无其他国家字符的对应关系。应运而生出现了万国码,他涵盖了全球所有的文字和二进制的对应关系。

Unicode2-4字节已经收录个字符,并还在一直不断扩张中...

Unicode起到了2个作用:

直接支持全球所有语言,每个国家都可以不用再使用自己之前的旧编码了,用unicode就可以了。(就跟英语是全球统一语言一样)

unicode包含了跟全球所有国家编码的映射关系,为什么呢?后面再讲

Unicode解决了字符和二进制的对应关系,但是使用unicode表示一个字符,太浪费空间。例如:利用unicode表示“Python”需要12个字节才能表示,比原来ASCII表示增加了1倍。由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!为了解决存储和网络传输的问题,出现了UnicodeTransformationFormat,学术名UTF,即:对unicode中的进行转换,以便于在存储和网络传输时可以节省空间!

UTF-8:使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个。

UTF-16:使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。

UTF-32:使用4个字节表示所有字符。

总结:UTF是为unicode编码设计的一种在存储和传输时节省空间的编码方案。

字符在硬盘上的存储无论以什么编码在内存里显示字符,存到硬盘上都是2进制。

ascii编码(美国):l0b1101o0bv0be0b1101GBK编码(中国):老0b100000b11111男0b100b11000孩0b0b10010Shift_JIS编码(日本):私0b011b00は0b000b11101ks_c_-编码(韩国):?0b0b?0b101100b10010TIS-编码(泰国):???0b101010b110010b...

要注意的是,存到硬盘上时是以何种编码存的,再从硬盘上读出来时,就必须以何种编码读,要不然就乱了。。编码的转换虽然国际语言是英语,但大家在自己的国家依然说自已的语言,不过出了国,你就得会英语编码也一样,虽然有了unicodeandutf-8,但是由于历史问题,各个国家依然在大量使用自己的编码,比如中国的windows,默认编码依然是gbk,而不是utf-8。基于此,如果中国的软件出口到美国,在美国人的电脑上就会显示乱码,因为他们没有gbk编码。若想让中国的软件可以正常的在美国人的电脑上显示,只有以下2条路可走:

让美国人的电脑上都装上gbk编码

把你的软件编码以utf-8编码

第1种方法几乎不可能实现,第2种方法比较简单。但是也只能是针对新开发的软件。如果你之前开发的软件就是以gbk编码的,上百万行代码可能已经写出去了,重新编码成utf-8格式也会费很大力气。

so,针对已经用gbk开发完毕的项目,以上2种方案都不能轻松的让项目在美国人电脑上正常显示,难道没有别的办法了么?

有,还记得我们讲unicode其中一个功能是其包含了跟全球所有国家编码的映射关系,意思就是,你写的是gbk的“路飞学城”,但是unicode能自动知道它在unicode中的“路飞学城”的编码是什么,如果这样的话,那是不是意味着,无论你以什么编码存储的数据,只要你的软件在把数据从硬盘读到内存里,转成unicode来显示,就可以了。由于所有的系统、编程语言都默认支持unicode,那你的gbk软件放到美国电脑上,加载到内存里,变成了unicode,中文就可以正常展示啦。

这个表你自己也可以下载下来unicode与gbk的映射表
分享 转发
TOP
发新话题 回复该主题