Python pycharm使用编解码器utf-8从系统stdout和stderr编码

Python pycharm使用编解码器utf-8从系统stdout和stderr编码,python,python-3.x,encoding,utf-8,Python,Python 3.x,Encoding,Utf 8,大家好,我正在pycharm社区版2016.3.2中的一个项目中与python 3.6.0合作。每当我使用编解码器对输入流进行编码时,我的程序中就会出现这种奇怪的错误: import codecs import sys sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) print("something") 问题是我的程序总是以退出代码1退出,

大家好,我正在pycharm社区版2016.3.2中的一个项目中与python 3.6.0合作。每当我使用编解码器对输入流进行编码时,我的程序中就会出现这种奇怪的错误:

import codecs
import sys

sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)

print("something")
问题是我的程序总是以退出代码1退出,以下是控制台输出:

Traceback (most recent call last):
  File "C:/Users/jhonsong/Desktop/restfulAPI/findARestaurant.py", line 9, in <module>
    print("something")
  File "C:\Python36-32\lib\codecs.py", line 377, in write
    self.stream.write(data)
TypeError: write() argument must be str, not bytes

Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:/Users/jhonson/Desktop/restfulAPI/findARestaurant.py”,第9行,在
打印(“某物”)
写入文件“C:\Python36-32\lib\codecs.py”,第377行
self.stream.write(数据)
TypeError:write()参数必须是str,而不是bytes
进程已完成,退出代码为1

但是我的输入是一个字符串,为什么codecs.write认为我在给它字节输入?

在Python 3中,
sys.stdout
是一个Unicode流<代码>编解码器。getwriter('utf8')需要一个字节流
sys.stdout.buffer
是原始字节流,因此使用:

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
sys.stderr = codecs.getwriter('utf8')(sys.stderr.buffer)
但这对于Python3.6来说似乎有些过头了,在Python3.6中,
打印应该可以正常工作。通常,如果您需要强制编码,比如说以某种编码将Python脚本的输出捕获到文件中,那么下面的脚本(Windows)可以工作。环境变量指示输出编码,并覆盖终端默认值

set PYTHONIOENCODING=utf8
python some_script.py > output.txt

由于您要提交到一个网站,该网站应负责以一种能够正确捕获结果的方式运行您的脚本。

无论如何,这听起来不是一个好主意-并非所有控制台都支持UTF-8。您应该打印并允许Python的区域设置检测得出适当的encoding@AlastairMcCormack我所做的是尝试完成这个在线课堂挑战:,它随着foursquare的API和可能的多语言结果的返回而发展。您建议将结果写入文件而不是控制台?我没有访问权限:(请参阅: