在 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/