[python] 字符编码

       最近学习python的字符编码,因为用的是python27, 众所周知python2的字符编码对中文非常非常不友好,所以将学习成

果分享一下。

       在编程中设计到编码的地方主要有两个:

    1.脚本文件的编码

       我们在读写文件的时候,文件都是有编码的,比如windows下一般默认是gbk,linux下一般是utf-8。

       在windows下用IDE编写python27程序, 脚本文件一般是ASCII格式,编译器在将python源文件编译为字节码文件的时候,

无法将中文编译为ASCII码,所以在文件中不管代码还是注释出现中文的时候就会出现下面情况:

st = u"中"
print str

[python] 字符编码

       上面的问题在IDE中会出现,在命令行不会出现,因为python在windows命令行的文件编码格式为cp936,近似于GBK,所以

能够识别中文

[python] 字符编码

       在pycharm等IDE中则需要转换一下格式,python文件转换格式只需在文件头加上“encoding=utf8”


# encoding=utf8
st = "中"
print st

[python] 字符编码

    2. 内存中变量的编码

      上面的注释只是让源文件中的中文变量能够编码读入内存,源文件编译之后需要在内存中运行代码。python27的默认编

码是ASCII,假如我们调用encode对变量进行编码的时候,如果没有先解码,则会调用系统默认的编码格式进行解码,此处中文

会报错

# encoding=utf8
st = "中"
print st.encode('utf8')
[python] 字符编码

      我们可以通过调用sys.getdefaultencoding()可以打印默认编码,也可以通过sys.setdefaultencoding()来重新设置默认编码

# encoding=utf8
import sys
reload(sys)
print sys.getdefaultencoding()
sys.setdefaultencoding('utf8')
print sys.getdefaultencoding()
st = "啊额"
print st.encode('utf8')
[python] 字符编码