Với một tên tập tin tìm kiếm như:Python open() unicode hành vi filename hệ điều hành trên khác nhau
filename = u"/direc/tories/español.jpg"
Và sử dụng open() như:
fp = open(filename, "rb")
này một cách chính xác sẽ mở các tập tin trên OSX (10,7), nhưng trên Ubuntu 11.04 hàm open() sẽ cố mở u"espa\xf1ol.jpg"
và điều này sẽ thất bại với IOError. Thông qua quá trình cố sửa lỗi này, tôi đã kiểm tra sys.getfilesystemencoding()
trên cả hai hệ thống, cả hai đều được đặt thành utf-8 (mặc dù Ubuntu báo cáo chữ hoa, nghĩa là UTF-8, không chắc chắn nếu điều đó có liên quan). Tôi cũng đã đặt # -*- coding: utf-8 -*-
trong tệp python, nhưng tôi chắc chắn điều này chỉ ảnh hưởng đến việc mã hóa bên trong tệp, chứ không phải bất kỳ chức năng bên ngoài nào hoặc cách python xử lý tài nguyên hệ thống. Tệp tồn tại trên cả hai hệ thống với eñe được hiển thị chính xác.
Câu hỏi cuối cùng là: Làm cách nào để mở tệp español.jpg
trên hệ thống Ubuntu?
Chỉnh sửa: Chuỗi español.jpg
thực sự sắp ra khỏi cơ sở dữ liệu qua ORM của Django (ImageFileField), nhưng khi tôi xử lý nó và thấy sự khác biệt về hành vi, tôi có một chuỗi unicode đường dẫn đến tệp.
Đối với giá trị của nó, '" \ xf1 "' là biểu diễn ISO-8859-1 của '" ñ "'. –
FYI, tôi đã chạm vào một tệp có tên 'español.jpg' và mở nó bằng cách của bạn và nó hoạt động chính xác trên Arch Linux của tôi. Bạn có thể dán đầu ra 'locale' của Ubuntu không? –
'locale' cung cấp' en_US.UTF-8' cho một số tham số bao gồm 'LANG'. – mrmagooey