import sys
print sys.getdefaultencoding()
该段程序在英文WindowsXP上 输出为:ascii
在某些IDE中,字符串的 输出总是出现乱码,甚至错误,其实是由于IDE的结果 输出控制台自身不能显示字符串的编码,而不是程序本身的问题。
如在UliPad中运行如下代码:
s=u"中文" #指定为Unicode编码
print s
会提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为UliPad在英文WindowsXP上的控制台信息 输出窗口是按照ascii编码 输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以 输出时产生了错误。
将最后一句改为:print s.encode('gb2312')
则能正确 输出“中文”两个字。
若最后一句改为:print s.encode('utf8')
则 输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息 输出窗口按照ascii编码 输出utf8编码的字符串的结果。
unicode(str,'gb2312')与str.decode('gb2312')是一样的,都是将gb2312编码的str转为unicode编码
使用str.__class__可以查看str的编码形式
原理说了半天,上代码:
#coding=utf-8
#!/usr/bin/python
s="中文"
if isinstance(s, unicode):
print s.encode('gb2312')
else:
print s.decode('utf-8').encode('gb2312')