gpt4 book ai didi

python - 从 Python 打印到 Heroku 日志时出现 Unicode 错误

转载 作者:行者123 更新时间:2023-11-28 16:44:51 25 4
gpt4 key购买 nike

我有一个 python 脚本,它使用他们的 Scheduler 附加组件在 Heroku 上定期运行。它会打印一些调试信息,但是当文本中有非 ASCII 字符时,我会在日志中收到如下错误:

SyntaxError: Non-ASCII character '\xc2' in file send-tweet.py on line 40, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

那时我在脚本中有这样一行:

print u"Unicode test: £ ’ …"

我不知道该怎么办。如果我在脚本中有这个:

import locale
print u"Encoding: %s" % locale.getdefaultlocale()[1]

然后这是在日志中的输出:

Encoding: UTF-8

那么,为什么尝试以 ASCII 格式输出其他文本却失败了?

更新: FWIW,here's the actual script我在用着。调试输出在第 38-39 行。

最佳答案

如错误所述:

no encoding declared

即您的 Python 源文件中没有声明编码。

链接的 PEP 告诉您如何在 Python 源代码中声明编码:当您从示例中输入 unicode 字符 £ 时,编码应设置为您的编辑器/IDE 使用的表。很可能假定为 UTF-8,因此在 send-tweet.py 的第一行放置以下内容:

# coding=utf-8

如果第一行已经包含如下路径指令:

#!/usr/local/bin/python

然后将编码指令放在第二行,例如

#!/usr/local/bin/python
# coding=utf-8

此外,在您的 Python 源代码中编写 Unicode 字符并声明 UTF-8 编码时,您必须使用支持 UTF-8 文件保存的编辑器,即可以将 Unicode 代码点序列化为UTF-8。

在这方面,请注意 Unicode 和 UTF-8 是不一样的。 Unicode指的是标准,而UTF-8是一种特定的编码,它决定了如何将Unicode码点序列化为兼容ASCII的字符串,用1到4个字节来表示原始的Unicode字符串。

因此在 Python 解释器中,字符串可能存储为 Unicode,但如果您想将 Unicode 字符串编写为 UTF-8,则需要先将字符串显式序列化为 UTF-8,例如

s.encode("utf-8")

这在将 Unicode 字符串输出到字节大小的流时尤其重要,例如当写入通常采用字节大小字符的日志文件句柄时,即 UTF-8 用于包含非 ASCII 字符的内容。

关于python - 从 Python 打印到 Heroku 日志时出现 Unicode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com