解读Python编码类型有哪些?

开课吧开课吧锤锤2021-06-02 14:41

点赞
有用
分享分享

    学Python怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则。今天为大家准备的内容是Python的编码类型。

py

    【所谓unicode】

    unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部表示,不能直接保存。所以存储时需要规定一种存储形式,比如utf-8和utf-16等。理论上unicode是一种能够容纳全世界所有语言文字的编码方案。(其他编码格式不再多说)

    【所谓GB码】

    GB就是“国标”的意思,即:中华人民共和国国家标准。GB码是面向汉字的编码,包括GB2312(GB2312-80),GBK,GB18030,表示范围从小到大递增,而且基本是向下兼容的。此外经常遇到一种叫做CP936的编码,实际上可以大概看做是GBK。

    【判断编码】

    1、使用isinstance(s,str)来判断一个字符串是否为一般字符串(str为ascii类型的字符串,utf-8、utf-16、GB2312、GBK等都是ascii类型的字符串);

    使用isinstance(s,unicode)来判断一个字符串是否为unicode编码形式的字符串(unicode编码的字符串才是unicode类型的字符串)。

    2、使用type()或者.__class__

    在编码正确的情况下:

    例如:stra="中",则使用type(stra)的结果是<type'str'>,表明为ascii类型字符串;

    例如:strb=u"中",则使用type(strb)的结果是<type'unicode'>,表明为unicode类型字符串。

tmp_str = 'tmp_str'
print tmp_str.__class__   #<type 'str'>
print type(tmp_str)    #<type 'str'>
print type(tmp_str).__name__ #str
tmp_str = u'tmp_str'
print tmp_str.__class__   #<type 'unicode'>
print type(tmp_str)    #<type 'unicode'>
print type(tmp_str).__name__ #unicode

    3、最好的办法是使用chardet判断,特别是在web相关的操作中,例如抓取html页面内容时,页面的charset标签只是标示编码,有时候不对,而且页面内容中一些中文可能超出了标示编码的范围,此时用charset检测最为方便准确。

    (1)安装办法:下载chardet后,将解压得到的chardet文件夹放在Python安装目录的\Lib\site-packages目录下,在程序中使用importchardet即可。

    (2)使用办法1:检测全部内容判断编码

import urllib2
import chardet
res = urllib2.urlopen('https://www.jb51.net')
res_cont = res.read()
res.close()
print chardet.detect(res_cont) #{'confidence': 0.99, 'encoding': 'utf-8'}

    detect函数返回值为一个包含2个键值对的字典,第一个是检测置信度,第二个就是检测到的编码形式。

    (3)使用办法2:检测部分内容判断编码,提高速度

import urllib2
from chardet.universaldetector import UniversalDetector
res = urllib2.urlopen('https://www.jb51.net')
detector = UniversalDetector()
for line in res.readlines():
 #detect untill reach threshold
 detector.feed(line)
 if detector.done:
  break
detector.close()
res.close()
print detector.result
#{'confidence': 0.99, 'encoding': 'utf-8'}

    每种编程语言的编码类型都是不相同的,当你掌握所有的编码,那么你就会出师的。以上就是小编为大家整理的“解读Python编码类型有哪些?”一文,更多Python教程尽在开课吧广场Python教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享