python之字符编码

字符编码是什么我们都已经知道了,计算机只认识  0 和 1 ,那么如何让计算机可以“理解”我们人类的语言呢?
聪明的人类发明了编码,比如:用”0100 0001” 来代表 “A”,这个就是ASCLL码(美国信息交换标准代码),起源于上个世纪50年代,用8位二进制数(1个字节)表示128种字符,包括了所有的大小写字母,数字,符号,和一些特殊字符。让计算机可以理解并显示人类的语言就这样实现了。
但是ASCLL码是美国标准,只能支持英文,不能显示中文啊,于是,我们有了自己的编码表 “GB2312”支持6700+汉字,在使用中又有了升级版“GBK”,支持21000+汉字。
于是,人本人也有了自己的编码“shift_JIS”。
韩国,泰国,….全世界的每个国家都有了自己的编码字符表……
但是以上所有代码都有一个局限性,我想你已经知道是什么了,即:仅涵盖本国语言的字符编码是不能显示其他国家的语言的,也就意味着,我们的国产软件无法再美国的电脑上显示,于是,Unicode(万国码)应运而生。
Unicode 用 两个字节表示所有的字 符,相比较ASCII码太浪费空间,unicode表示“Python”需要12个字节才能表示,但是ASCLL码只用6个字节
为了解决存储和网络传输的问题,出现了Unicode Transformation Format ,学名UTF,
至此,编码的问题告一段落

UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个。
UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
UTF-32: 使用4个字节表示所有字符。
总结:UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案。
你了解了吗?字符在硬盘上的存储知识点:无论以什么编码在内存里小时字符,存到硬盘上都是2进制,在对字符进行存储和读取是必须是同样的编码,否则会显示乱码,记住这点,乱码的问题就好解决了
有时,我们会不知道文本对象的编码类型,你需要一个检测编码的工具
模块:chardet
安装:pip install chardet
# 需要安装模块
import chardet
file_path = 'phone.txt'
# 使用 chardet 模块,要把文件以二进制模式读取
f = open(file_path, 'rb')
res = chardet.detect(f.read())
print(res)

猜你喜欢

转载自www.cnblogs.com/yxiaodao/p/9081978.html