[python] 字符编码
最近学习python的字符编码,因为用的是python27, 众所周知python2的字符编码对中文非常非常不友好,所以将学习成
果分享一下。
在编程中设计到编码的地方主要有两个:
1.脚本文件的编码
我们在读写文件的时候,文件都是有编码的,比如windows下一般默认是gbk,linux下一般是utf-8。
在windows下用IDE编写python27程序, 脚本文件一般是ASCII格式,编译器在将python源文件编译为字节码文件的时候,
无法将中文编译为ASCII码,所以在文件中不管代码还是注释出现中文的时候就会出现下面情况:
st = u"中" print str
上面的问题在IDE中会出现,在命令行不会出现,因为python在windows命令行的文件编码格式为cp936,近似于GBK,所以
能够识别中文
在pycharm等IDE中则需要转换一下格式,python文件转换格式只需在文件头加上“encoding=utf8”
# encoding=utf8 st = "中" print st
2. 内存中变量的编码
上面的注释只是让源文件中的中文变量能够编码读入内存,源文件编译之后需要在内存中运行代码。python27的默认编
码是ASCII,假如我们调用encode对变量进行编码的时候,如果没有先解码,则会调用系统默认的编码格式进行解码,此处中文
会报错
# encoding=utf8 st = "中" print st.encode('utf8')
我们可以通过调用sys.getdefaultencoding()可以打印默认编码,也可以通过sys.setdefaultencoding()来重新设置默认编码
# encoding=utf8 import sys reload(sys) print sys.getdefaultencoding() sys.setdefaultencoding('utf8') print sys.getdefaultencoding() st = "啊额" print st.encode('utf8')