在Python中使用管道标准输出时设置正确的编码当Python程序输出管道时,Python解释器会对编码感到困惑,并将其设置为None。这意味着这样的程序:# -*- coding: utf-8 -*-print u"åäö"在正常运行时工作正常,但在以下情况下失败:UnicodeEncodeError:‘ASCII’编解码器不能编码0位置的字符u‘\xA0:序号不在范围内(128)在管道序列中使用时。什么是最好的办法,使这个工作时,管道?我可以告诉它使用任何编码shell/文件系统/任何正在使用的东西吗?到目前为止,我看到的建议是直接修改站点.py,或者使用这个黑客对默认编码进行硬编码:# -*- coding: utf-8 -*-import sys
reload(sys)sys.setdefaultencoding('utf-8')print u"åäö"有更好的方法使管道工作吗?
3 回答
![?](http://img1.sycdn.imooc.com/54584f3100019e9702200220-100-100.jpg)
繁花不似锦
TA贡献1851条经验 获得超4个赞
# -*- coding: utf-8 -*-print u"åäö".encode('utf-8')
import sysfor line in sys.stdin: # Decode what you receive: line = line.decode('iso8859-1') # Work with Unicode internally: line = line.upper() # Encode what you send: line = line.encode('utf-8') sys.stdout.write(line)
![?](http://img1.sycdn.imooc.com/545861f00001be3402200220-100-100.jpg)
阿晨1998
TA贡献2037条经验 获得超6个赞
# -*- coding: utf-8 -*-print u"åäö".encode('utf-8')
sys.stdout
import sysimport codecs sys.stdout = codecs.getwriter('utf8')(sys.stdout)
![?](http://img1.sycdn.imooc.com/5458632800010f8802200220-100-100.jpg)
有只小跳蛙
TA贡献1824条经验 获得超8个赞
import sys, locale, osprint(sys.stdout.encoding)print(sys.stdout.isatty())print(locale.getpreferredencoding()) print(sys.getfilesystemencoding())print(os.environ["PYTHONIOENCODING"])print(chr(246), chr(9786), chr(9787))
utf_8 False ANSI_X3.4-1968 ascii utf_8 ö ☺ ☻
添加回答
举报
0/150
提交
取消