【问题标题】:python3 print function emits 'ascii' codec can't encode character errorpython3打印函数发出'ascii'编解码器无法编码字符错误
【发布时间】:2017-06-25 06:35:36
【问题描述】:

用户在我的网站上输入了一个字符串。他们输入一个非 ASCII 字符。

javascript 保存他们的输入,用 JSON.stringify() 打包,然后发送到服务器。

运行 Python3 的服务器,使用 json.loads 解压 JSON 并将此字符串保存在 Node 对象中,然后运行该行

print('looks like {}'.format(node_obj))

我收到错误提示

'ascii' codec can't encode character error '\u2212' in position 941: ordinal not in range(128)

在我看来,Python3 中的 print 函数正在尝试将 unicode 字符串转换为 ascii! (使用 ascii 编码转换为字节对象?)

有没有可能是我的 FreeBSD 服务器不支持 UTF-8,导致 Python 的 print 函数进行这种转换?或者可能一开始就没有对字符串进行适当的清理,当我第一次从用户那里收到它时,我应该在 javascript 中这样做?

让我知道哪些进一步的信息对您有用。

【问题讨论】:

    标签: javascript python-3.x unicode encoding non-ascii-characters


    【解决方案1】:

    locale 命令说明了什么?

    您可以让 Python 使用带有 LANG=en_US.UTF-8PYTHONIOENCODING=utf-8 的 utf-8。

    在默认环境中设置 LANG 取决于平台:https://unix.stackexchange.com/questions/342817/how-do-i-add-a-language-in-freebsd

    【讨论】:

    • % locale LANG= LC_CTYPE="C" LC_COLLATE="C" LC_TIME="C" LC_NUMERIC="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=
    • 我认为运行export LANG="en_US.UTF-8" 对我有用。我要等一会儿才能接受答案,因为我想确保它是正确的。
    • 是的,将LANG 环境变量设置为使用UTF-8,无论哪种方式适合您的操作系统,都是正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 2016-12-17
    • 2017-03-31
    • 1970-01-01
    • 2015-02-03
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多