@wzhang1117
2017-07-04T19:38:14.000000Z
字数 1019
阅读 3620
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_console
win_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 sys
if sys.platform == 'win32':
import win_unicode_console
win_unicode_console.enable()
input_unicode = raw_input
else:
def input_unicode(p=''):
return raw_input(p).decode('utf8')
u = input_unicode()
print type(u) # unicode