Sử dụng python 3.2 trong Windows 7 Tôi nhận được sau trong IDLE:UnicodeEncodeError khi sử dụng chức năng biên dịch
>>compile('pass', r'c:\temp\工具\module1.py', 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character
Ai có thể giải thích tại sao báo cáo kết quả biên dịch cố gắng để chuyển đổi tên tập tin unicode sử dụng MBCS? Tôi biết rằng sys.getfilesystemencoding trả về 'mbcs' trong Windows, nhưng tôi nghĩ rằng điều này không được sử dụng khi tên tập tin unicode được cung cấp.
ví dụ:
f = open(r'c:\temp\工具\module1.py')
công trình.
Đối với một thử nghiệm hoàn chỉnh hơn tiết kiệm như sau trong một file utf8 mã hóa và chạy nó sử dụng phiên bản python.exe tiêu chuẩn 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)
Output:
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
đã thử cục bộ trong XP và nhận lại đối tượng mã thích hợp. Đây có phải là chạy từ CLI hoặc là điều này chạy qua một tập tin? – monkut
Tôi sẽ đoán rằng nó không phải là chữ ký cuộc gọi đó là vấn đề, nhưng nội dung của tập tin đó gây ra lỗi unicode. kiểm tra để đảm bảo rằng "module1.py" được mã hóa chính xác, với chữ ký mã hóa được gán. – monkut
@monkut: Trong Python 3.x, bạn không phải lo lắng về việc mã hóa - nếu có các ký tự UTF-8 trong tệp, thì chúng sẽ được hiển thị dưới dạng ký tự UTF-8. – Makoto