python 中的 unicode是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好,utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.
py文件中的编码
Python 默认脚本文件都是 ANSCII
编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示
"来修正一个 module 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明:# -*- coding=utf-8 -*-
或者 #coding=utf-8
其他的编码如:gbk、gb2312也可以;否则会出现:
SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
python中的编码与解码
先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str
和 unicode
,他们都是basestring的派生类;
- str类型是一个包含Characters represent (at least) 8-bit bytes的序列;
- unicode 的每个 unit 是一个 unicode obj;
在str的文档中有这样的一句话:
The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.
也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。
python 编码转换函数
unicode 转为 gb2312,utf-8等,使用 encode(encoding)
# -*- coding=UTF-8 -*-
if __name__ == '__main__':
s = u'中国'
s_gb = s.encode('gb2312')
utf-8,GBK转换为 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)