相关疑难解决方法(0)

如何在Python 3中设置sys.stdout编码?

在Python 2中设置默认输出编码是一个众所周知的习惯用法:

sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
Run Code Online (Sandbox Code Playgroud)

这将sys.stdout对象包装在编解码器编写器中,该编解码器编写器以UTF-8编码输出.

但是,这种技术在Python 3中不起作用,因为sys.stdout.write()期望a str,但是编码的结果是bytes,并且当codecs尝试将编码的字节写入原始时发生错误sys.stdout.

在Python 3中执行此操作的正确方法是什么?

python unicode stdout python-3.x

56
推荐指数
7
解决办法
4万
查看次数

如何在Python <3中将UTF-8编码的文本打印到控制台?

我正在运行一个最新的Linux系统,我的所有语言环境都是UTF-8:

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
...
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

现在我想将UTF-8编码的内容写入控制台.

现在Python使用UTF-8进行FS编码,但坚持使用ASCII作为默认编码:-(

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我认为最好(干净)的方法是设置PYTHONIOENCODING环境变量.但似乎Python忽略了它.至少在我的系统上ascii,即使在设置envvar之后,我仍然保持默认编码.

# tried this in ~/.bashrc and ~/.profile (also sourced them)
# and on the commandline before running python
export PYTHONIOENCODING=UTF-8
Run Code Online (Sandbox Code Playgroud)

如果我在脚本开头执行以下操作,它可以工作:

>>> import sys
>>> reload(sys)  # to enable `setdefaultencoding` again
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("UTF-8")
>>> sys.getdefaultencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

但这种做法似乎不洁净.那么,实现这一目标的好方法是什么?

解决方法

而不是更改默认编码 - 这不是一个好主意(请参阅mesilliac的答案) - 我只是sys.stdoutStreamWriter …

python shell encoding ascii utf-8

49
推荐指数
4
解决办法
9万
查看次数

标签 统计

python ×2

ascii ×1

encoding ×1

python-3.x ×1

shell ×1

stdout ×1

unicode ×1

utf-8 ×1