编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

解读Python编码类型有哪些?(编码 python)

wxchong 2024-10-25 17:44:41 开源技术 10 ℃ 0 评论

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

【所谓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

12345678910复制代码类型:[python]

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'}

12345678复制代码类型:[python]

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'}

123456789101112131415复制代码类型:[python]

每种编程语言的编码类型都是不相同的,当你掌握所有的编码,那么你就会出师的。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表