Используя python 3.2 в Windows 7, я получаю следующее в IDLE:
>>compile('pass', r'c:\temp\工具\module1.py', 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character
Кто-нибудь может объяснить, почему оператор compile пытается преобразовать имя файла в кодировке Unicode, используя mbcs?Я знаю, что sys.getfilesystemencoding возвращает «mbcs» в Windows, но я подумал, что это не используется, когда предоставляются имена файлов в Юникоде.
например:
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