python 编码

浏览器一般都是以UTF-8的编码格式展示,所以服务器在返回数据的时候需要将编码的格式统一转换为utf-8

一、判断编码的格式
1、判断字符串是否为一般的字符串
isinstance(ch,str)
例如:
ch = 'ertyue'
print isinstance(ch,str)

结果:True

ch = u'中国'
print isinstance(ch,str)

结果:False

ch = u'中国'
print isinstance(ch,unicode)

结果:True

这种方法不能确定字符串的编码是否是UTF-8格式,有局限性

2、使用chardet可以很好的判断字符串是哪一种编码格式,首先需要安装该模块:pip install chardet
也可以直接下载该文件放置到应用程序的目录下,http://chardet.feedparser.org/download/

#-*- coding:utf-8 -*-
import urllib
import chardet

data = urllib.urlopen("http://www.google.cn").read()
print chardet.detect(data)

ch = 'trtyiewo'
print chardet.detect(ch)

ch = '中国'
print chardet.detect(ch)

结果:
[root@test-service01 tmp]# python test.py 
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'}
{'confidence': 0.7525, 'language': '', 'encoding': 'utf-8'}

二、编码基础
Unicode和str
1、str就是一个字符串,Unicode是一种编码标准,具体的实现标准可能是utf-8\gbk等
str是字节串,由unicode经过编码(encode)后的字节组成的
unicode才是真正意义上的字符串,由字符组成
S1 = “中国”-----字符串
S2 = u' 中国'-----Unicode
S3 = Unicode(“中国”,'utf-8')----utf-8格式字节串

2、编码与解码
encode----编码,decode----解码
在处理编码之前首先需要搞清楚所要处理的是str还是Unicode
str不能使用encode ,Unicode不能使用decode,不同的编码之间进行转换的时候使用Unicode作为中间编码
S = '中国' -----utf-8格式的字节串
U = S.decode('utf-8')-----解码为unicode对象
SU = U.encode('gbk')-----编码为gbk格式的字节串

python 的默认编码是ascii ,所以有一个经常遇到的编码错误问题:
S = '中国'
S.encode('gbk')
错误信息:UnicodeDecodeError: ‘ascii’ codec can’t decode byte ……
这样的操作实质上是对ascii编码进行编码,这是不对的
解决方法:
在程序中设置默认的编码defaultencoding
添加以下内容即可:
reload(sys)
sys.setdefaultencoding('utf-8')

3、str和Unicode之间的转化
str到Unicode是解码decode,普通的字符串转化成Unicode
string1 = unicode(str1,"utf-8")
string2 = unicode(asciistring,"ascii")
string3 = unicode(isostring,"ISO-8859-1")
string4 = unicode(utf16string,"utf-16")

4、Unicode转化成普通的字符串编码encode
unicodestring = u'中国'
utf8string = unicodestring.encode("utf-8")
asciistring = unicodestring.encode("ascii")
isostring = unicodestring.encode("ISO-8859-1")
utf16string = unicodestring.encode("utf-16")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值