查询字节串编码类型的模块chardet,及编码问题

这个模块需要安装

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,保证数据传输的稳定性。

posted on 2022-09-03 23:15  RicLiu  阅读(50)  评论(0编辑  收藏  举报