gpt4 book ai didi

python - 使用编译函数时出现UnicodeEncodeError

转载 作者:可可西里 更新时间:2023-11-01 13:30:27 28 4
gpt4 key购买 nike

在 Windows 7 中使用 python 3.2,我在 IDLE 中得到以下信息:

>>compile('pass', r'c:\temp\工具\module1.py', 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character

谁能解释为什么编译语句会尝试使用 mbcs 转换 unicode 文件名?我知道 sys.getfilesystemencoding 在 Windows 中返回 'mbcs',但我认为在提供 unicode 文件名时不会使用它。

例如:

f = open(r'c:\temp\工具\module1.py') 

有效。

要进行更完整的测试,请将以下内容保存在 utf8 编码文件中,并使用标准 python.exe 版本 3.2 运行它

# -*- coding: utf8 -*-
fname = r'c:\temp\工具\module1.py'
# I do have the a file named fname but you can comment out the following two lines
f = open(fname)
print('ok')
cmp = compile('pass', fname, 'exec')
print(cmp)

输出:

ok
Traceback (most recent call last):
File "module8.py", line 6, in <module>
cmp = compile('pass', fname, 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: inval
id character

最佳答案

来自 Python issue 10114 ,似乎逻辑是 Python 使用的所有文件名都应该对使用它们的平台有效。它使用文件系统编码进行编码,以便在 Python 的 C 内部使用。

我同意它可能不应该在 Windows 上引发错误,因为任何 Unicode 文件名都是有效的。为此,您可能希望使用 Python 提交错误报告。但请注意,必要的更改可能并非微不足道,因为如果无法编码,任何使用文件名的 C 代码都必须做一些事情。

关于python - 使用编译函数时出现UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798591/

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