字符编码之文件处理
Python文件头部模板
先说个小知识点:如何在创建文件的时候自动添加文件的头部信息!
通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View--选中Toolbar工具条
修改后的效果:
Python编码详解--呕心沥血
#-*- coding:utf-8 -*-
这 bit就咱们常说一位二进制,一位二进制要么是0 要么是 1
''' 8b = 1B #小b=bit ; 大B=byte 1024B = 1KB 1024KB = 1M 1024M = 1G 1024G = 1T '''
在原有的扩展位中,扩展出自己的gbk、gb2312、gb2318字符编码。
这种乱码的出现基本上就两种情况:
1、字符编码没有
2、字符编码冲突了,人家在写这个程序的时候指定的字符集和咱们使用的字符集的位置不对。 0 0 !
你想想不光是亚洲国家这样,欧洲国家,非洲国家都会存在这个问题,基于这个乱象国际互联网组织就说你们各个国家都别搞了,我们给你们搞一个统一的,这个统一的是什么呢Unicode“万国编码”,
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,
规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多。
这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。
为了解决个问题就出现了:UTF-8编码
UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
通过这种可扩展的方式来存储。
OK 上面了解了:
1、什么ASCII编码
2、什么Unicode编码
3、什么UTF-8编码
回顾下乱码的出现原因:1、没有字符集 2、字符集冲突
在2.x版本的Python中Pyton在解释.py文件的时候,默认是给他一个编码的就是ASCII码,因为在Python3中默认就是Unicode编码。。。。。
Python编码转换
1、
这就是个坑,是个遗留问题。
2、
那如果没有这个Unicode编码的话,到咱们这里来显示肯定是乱码是吧
一、Python3中的编码转换
#因为在Python3中默认就是unicode编码
#!/usr/bin/env python #-*- coding:utf-8 -*- #author luotianshuai tim = '天帅' #转为UTF-8编码 print(tim.encode('UTF-8')) #转为GBK编码 print(tim.encode('GBK')) #转为ASCII编码(报错为什么?因为ASCII码表中没有‘天帅’这个字符集~~) print(tim.encode('ASCII'))
二、Python2.X中的编码转换
#因为在python2.X中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,的需要Unicode做一个转接站点。
#!/usr/bin/env python #-*- coding:utf-8 -*- #author luotianshuai import chardet tim = '你好' print chardet.detect(tim) #先解码为Unicode编码,然后在从Unicode编码为GBK new_tim = tim.decode('UTF-8').encode('GBK') print chardet.detect(new_tim) #结果 ''' {'confidence': 0.75249999999999995, 'encoding': 'utf-8'} {'confidence': 0.35982121203616341, 'encoding': 'TIS-620'} '''