这个模块需要安装
wget https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz
解压后 sage setup.py install
chardet可以查询字节串的编码方式
使用前先声明
import chardet
使用方法:
x=chardet.detect(abc)
print(x)
1.查询系统默认的编码类型
sys.getdefaultencoding()
python3默认是utf-8,python2默认是ascii
2. 关于编码的理论
但凡考虑到字符串的存取,都需要考虑编码问题。
定义:人类能够识别的字符,例如中文,英文,等,而计算机能识别的,只有二进制数字。编码,就是一套字符和二进制数字的映射表,起着翻译的作用。
字符--》 unicode--》二进制,这个过程称为编码,即encode
二进制--》unicode--》字符,这个过程称为解码,即decode
x="中国"
a=x.encode('utf-8')
此时,a是bytes类型,即utf-8编码的二进制。
b=a.decode('utf-8')
此时,b=x
3.编码的历史
6.字符编码的发展史
阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII
ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符
ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符)
后来为了将拉丁文也编码进了ASCII表,将最高位也占用了
阶段二:为了满足中文,中国人定制了GBK
GBK:2Bytes代表一个字符,为了满足其他国家,各个国家纷纷定制了自己的编码,日本把日文编到Shift_JIS
里,韩国把韩文编到Euc-kr
里
阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
于是产生了unicode, 统一用2Bytes代表一个字符, 2**16-1=65535,可代表6万多个字符,因而兼容万国语言
但对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)
于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes
需要强调的是:
unicode:简单粗暴,多有的字符都是2Bytes,优点是字符--数字的转换速度快;缺点是占用空间大。
utf-8:精准,可变长,优点是节省空间;缺点是转换速度慢,因为每次转换都需要计算出需要多长Bytes才能够准确表示。
1.内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是越快越好)
2.硬盘中或网络传输用utf-8,保证数据传输的稳定性。