gpt4 book ai didi

python - 读取 Unicode 文件时出现 UnicodeDecodeError

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:14 26 4
gpt4 key购买 nike

我遇到一个问题,当我执行一个涉及从包含 unicode 代码点的文件中读取数据的脚本时,一切正常。但是当它通过另一个应用程序执行时,它会引发以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

我正在使用完全相同的数据文件执行完全相同的代码。复制问题的示例数据文件如下所示:

¥ Α © §

我把这个叫做sample.txt

一个非常简单的 python 脚本,用于简单地读取和打印文件内容:

with open("sample.txt") as f:
for line in f:
print(line)

print("Done")

这在命令行中执行得很好;通过 Apache/CGI 执行失败并出现上述错误。

最佳答案

问题的提示来自open 函数的文档:

In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding. [Link]

依赖于平台的建议环境变量。因此,我检查了为我的 shell 设置了哪些环境变量,发现 LANG 设置为 en_US.UTF-8。转储Apache设置的环境变量,发现LANG不见了。

因此,显然当无法确定语言环境时,Python 使用 ASCII 作为默认文件编码。因此,当序号超出 ASCII 范围时会遇到错误。

为了解决这个问题,我在我的 CGI 脚本中设置了这个环境变量。如果环境变量以某种方式从用户 shell 中丢失,则可以通过正常方法或仅通过以下方式设置它:

export LANG=en_US.UTF-8

或者任何需要的首选编码。

请注意,如果用户 shell 中缺少区域设置,问题可能会更加明显,因为没有它,像 vi 这样的文本编辑器将无法显示字符。当仅从 Apache(或其他一些应用程序)调用时出现问题时,它要微妙得多。

关于python - 读取 Unicode 文件时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130476/

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