Python 3,是使用sys.stdout.buffer.write()好风格?

ily*_* n. 6 unicode cgi python-3.x

在我学习了如何在Python 3.0 web脚本中阅读 unicode文件之后,现在是时候让我学习使用print()unicode了.

我搜索了编写unicode,例如这个问题解释了你不能将unicode字符写入非unicode控制台.但是,就我而言,输出是给Apache的,我相信它能够处理unicode文本.但是,出于某种原因,stdout我的网络脚本是在ascii.

显然,如果我打开一个文件写自己,我会做类似的事情

open(filename, 'w', encoding='utf8')
Run Code Online (Sandbox Code Playgroud)

但由于我得到了一个开放的流,我使用了

sys.stdout.buffer.write(mytext.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

一切似乎都有效.这是否违反某些良好行为规则或有任何意外后果?

Ale*_*lli 7

我不认为你违反任何规则,但是

sys.stdout = codecs.EncodedFile(sys.stdout, 'utf8')
Run Code Online (Sandbox Code Playgroud)

看起来它可能更方便/更笨重.

编辑:根据评论,这不太对 - @Miles给出了正确的变体(谢谢!):

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer) 
Run Code Online (Sandbox Code Playgroud)

编辑:如果您可以安排PYTHONIOENCODING在Apache启动脚本时将环境变量设置为utf8,那就更好了,将sys.stdout其设置为utf8自动; 但是,如果这是不可行或不切实际的codecs解决方案.

  • 尝试:sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer) (3认同)