【问题标题】:setting default encoding in a python.py [duplicate]在 python.py 中设置默认编码 [重复]
【发布时间】:2013-02-04 06:12:22
【问题描述】:

我正在调用某种 API,它返回一个具有三个属性的对象:

obj.name
obj.id
obj.text

所有这些都可能有不同的编码。

为了正确输出到我的终端,我现在正在做

print obj.name.encode('UTF-8')
print obj.id.encode('UTF-8')
print obj.text.encode('UTF-8')

有没有一种方法可以简单地将我的默认编码设置为 UTF-8?

我阅读了一些其他帖子,其中建议调用 sys.setdefaultencoding('UTF-8'),这在 python 2.7.x 中不再可用

请指教。

【问题讨论】:

    标签: python encoding python-2.7


    【解决方案1】:

    通常 Python 从终端设置中检测输出编码;您可以通过运行查看 Python 检测到的内容:

    import sys
    sys.stdout.encoding
    

    如果不适合你,你真的想配置你的终端来指定正确的编码;例如,在 POSIX 系统上设置 LC_CTYPE 环境变量。

    您还可以通过设置 PYTHONIOENCODING 环境变量来强制 Python 使用编码:

    $ PYTHONIOENCODING=latin-1 python -c 'import sys; print sys.stdout.encoding'
    latin-1
    $  PYTHONIOENCODING=utf8 python -c 'import sys; print sys.stdout.encoding'
    utf8
    

    【讨论】:

    • 如果我没有专门将编码设置为 UTF-8,则会引发错误。而我的终端已经在.bash_profile 中设置为:export LANG="en_US.UTF-8"。我认为我的问题更多是关于我们如何将 python 脚本的全局环境设置为特定的编码,而不是在打印输出期间单独设置每一行。
    • @CloudYoda:PYTHONIOENCODING 就是这样做的。如果您的 bash 配置文件已经设置了 LANG,那么 Python 应该 已经检测到您的终端编码,除非您使用管道重定向脚本输出或 > shell 流重定向。
    • 谢谢!它似乎工作......虽然它在我的 IDE 中抛出了不同的异常......但我认为这是由于我的环境设置。
    • @CloudYoda:对,如果您在 IDE 中运行 Python,那么检测到的 stdout 编码将再次与您的终端不同!
    猜你喜欢
    • 2010-11-10
    • 2011-08-29
    • 2018-01-26
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多