记录到控制台时出现python3 UnicodeDecodeError [重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我刚刚将我的webapp移植到python 3.我在Mac上开发并部署在CentOS服务器中。我发现许多UnicodeDecodeError在我的本地测试环境中没有发生,但它们出现在部署服务器中(当然:D)

其中大多数我通过在打开文件时指定编码来修复。但是有一个地方我不知道如何指定编码而且它在记录中。我仍然会遇到如下错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\xab' in position 85: ordinal not in range(128)

在python 2中存在同样的问题(在两个平台中)并且用这个解决了

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

这改变了sys.getdefaultencoder()asciiutf-8的价值

但现在在python3中sys.getdefaultencoder()默认已经是utf-8Why should we NOT use sys.setdefaultencoding("utf-8") in a py script?)所以我对导致这种行为差异的原因一无所知。

所以:

  • 我该怎么想看看为什么两个平台都有不同的编码默认值?
  • 如何解决这个问题呢?
python python-3.x python-unicode python-logging
1个回答
0
投票

我在这里找到答案Python3 UnicodeDecodeError。让我展开:

这可以通过将环境值LC_CTYPE设置为en_US.UTF-8而不是UTF-8来解决。这可以在.bashrc中设置:

export LC_CTYPE=en_US.UTF-8

奇怪的是,我的mac和部署服务器都有LC_CTYPE=UTF-8,在我的mac中它只是工作,但在部署服务器中我需要将它设置为en_US.UTF-8否则它将无法正常工作。

但这似乎是我的部署服务器的一个奇怪的配置,因为如果我将它设置为UTF-8它抱怨像这样:

$ export LC_CTYPE=UTF-8
bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

(我的mac不抱怨)。

所以很明显python不是直接阅读LC_CTYPE而是阅读通过设置LC_CTYPE设置的其他内容(区域设置?)。

© www.soinside.com 2019 - 2024. All rights reserved.