2013-11-24 17 views

Trả lời

3

Mã hóa hệ thống tệp là, trong nhiều trường hợp, thuộc tính vốn có của hệ điều hành. Nó không thể thay đổi - nếu vì lý do nào đó, bạn cần tạo các tệp có tên được mã hóa khác với mã hóa hệ thống tập tin ngụ ý, không sử dụng chuỗi Unicode cho tên tệp. (Hoặc, nếu bạn đang sử dụng Python 3, sử dụng một đối tượng byte thay vì một chuỗi.)

See the documentation for details. Đặc biệt, lưu ý rằng, trên các hệ thống Windows, hệ thống tập tin là natively Unicode, vì vậy không có chuyển đổi thực sự diễn ra, và, do đó, nó không thể sử dụng một mã hóa hệ thống tập tin thay thế.

4

Có hai cách để thay đổi nó:

1) (linux-only) export LC_CTYPE=en_US.UTF8 trước khi tung ra python:

$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())' 
ANSI_X3.4-1968 
$ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())' 
UTF-8 

Lưu ý rằng LANG phục vụ như là giá trị mặc định cho LC_CTYPE nếu nó không phải là thiết lập, trong khi LC_ALL ghi đè cả LC_CTYPE và LANG)

2) monkeypatching:

import sys 
sys.getfilesystemencoding = lambda: 'UTF-8' 

Cả hai phương thức đều cho phép các chức năng như os.stat chấp nhận các chuỗi unicode (python2.x). Nếu không, các hàm đó sẽ tăng ngoại lệ khi chúng nhìn thấy các ký hiệu không phải ascii trong tên tệp.

+0

phương pháp 1 không hoạt động hoặc tôi – sureshvv

+0

@sureshvv Hệ điều hành của bạn là gì? –

+0

Ubuntu 16.04. Đã phải thêm LANG = en_US.UTF8 vào/etc/environment và khởi động lại. – sureshvv

Các vấn đề liên quan