@wzhang1117
2017-07-04T11:38:14.000000Z
字数 1019
阅读 3861
python 编码
print是python2.7最常用的语句之一,用于将字符串或unicode对象输出到屏幕,如果是字符串则直接输出,如果是unicode对象,则会先将其使用sys.stdout.encoding进行编码再输出。推荐使用print+unicode对象,这样可以确保系统对unicode进行正确的编码,如果使用print+已编码字符串,需要保证使用sys.stdout.encoding进行编码,否则不论是使用gbk或utf8进行硬编码都会导致一些跨平台的问题。
# 下面的语句在win linux mac上都能正确执行print u'中文'# 下面的语句在windows下会打印乱码print u'中文'.encode('utf8')# 下面的代码在mac linux下会打印乱码print u'中文'.encode('gbk')
但是在windows下还有一类问题,就是要输出一个不在gbk编码中的字符时会导致编码异常。同理,输入时也会无法输入这种字符。
# 因为在windows下,系统尝试将下面的unicode对象进行gbk编码,而©字符在gbk编码中根本不存在,因此无法编码print u'©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号'
最好的解决办法是pip install win-unicode-console
import win_unicode_consolewin_unicode_console.enable()print u'©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号'u = raw_input(u'请输入©:')print type(u)
这里会到来一个副作用就是raw_input函数返回的结果为unicode对象,这就导致了跨平台情况下linux和mac通过raw_input返回字符串而通过windows返回的则是unicode,推荐下面的使用方式。
import sysif sys.platform == 'win32':import win_unicode_consolewin_unicode_console.enable()input_unicode = raw_inputelse:def input_unicode(p=''):return raw_input(p).decode('utf8')u = input_unicode()print type(u) # unicode