关于字符的处理
python文件的编码
python 脚本文件默认都是采用ANSCII编码的,当文件中有非ANSCII编码范围内的字符时,需要“编码指示”来修正module中的定义,比如# --coding=utf-8--
或者#coding=utf-8
python文件中的编码与解码
python中有两种编码方式,分别是str和unicode (在python3中好像只有一种unicode,str也是unicode)
The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.
也就是说在读取一个文件的内容时,保持的对象为str类型,如果想把str转换成其他类型,需要先将其编码为unicode然后再转换为其他类型
python编码转换函数
unicode转换为gb2312
s = u'中国'
s_gb = s.encode('gb2312')
s_gb
b'\xd6\xd0\xb9\xfa'
utf-8转换为unicode
s = u'中国'
s_utf8 = s.encode('utf-8')
assert(s_utf8.decode('utf-8') == s) #assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常
普通的str转换为unicode
#coding=UTF-8
s = '中国'
su = u'中国'
s_unicode = s.encode('utf-8')
assert(s == su)
s = '中国'
s.encode('gb2312')
b'\xd6\xd0\xb9\xfa'
文件编码与print函数
# coding=gbk
print (open('test.txt').read())
abc中文
python编码检测
使用chardet可以很方便的实现字符串的编码检测
import urllib.request
import chardet
url = urllib.request.urlopen('http://www.google.cn/').read()
chardet.detect(url)
{'confidence': 0.99, 'encoding': 'utf-8', 'language': ''}
在转换编码时经常会遇到非法字符,解决办法:
s.decode('gbk','ignore').encode('utf-8')