在我了解了Python 3.0 Web脚本中的reading unicode文件之后,现在该是我学习将print()
与unicode一起使用的时候了。
我搜索了编写unicode的代码,例如this question解释说您不能将unicode字符写入非unicode控制台。但是,就我而言,输出是提供给Apache的,我确信它能够处理unicode文本。但是由于某种原因,我的Web脚本的stdout
在ascii
中。
显然,如果我打开一个文件来写自己,我会做类似的事情
open(filename, 'w', encoding='utf8')
但是由于提供了开放流,所以我求助于
sys.stdout.buffer.write(mytext.encode('utf-8'))
一切似乎都正常。这是否违反了良好行为准则或有任何意想不到的后果?
最佳答案
我认为您没有违反任何规则,但是
sys.stdout = codecs.EncodedFile(sys.stdout, 'utf8')
看起来可能更方便/不太笨重。
编辑:根据评论,这不太正确-@Miles提供了正确的变体(谢谢!):
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
编辑:如果您可以安排在Apache启动脚本时将环境变量
PYTHONIOENCODING
设置为utf8,那会更好,使sys.stdout
自动设置为utf8
;但是如果这不可行或不切实际,那么codecs
解决方案就可以了。
关于unicode - Python 3是使用sys.stdout.buffer.write()好的样式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984014/