Tôi có thể thay đổi mặc định open()
(io.open()
in 2.7) mã hóa văn bản theo cách đa nền tảng không?Có cách nào để thay đổi mã hóa văn bản mặc định mở của Python() không?
Vì vậy mà tôi không cần phải chỉ định mỗi lần open(...,encoding='utf-8')
.
Trong chế độ văn bản, nếu mã hóa không được xác định mã hóa sử dụng là nền tảng phụ thuộc:
locale.getpreferredencoding(False)
được gọi là để có được mã hóa địa phương hiện tại.
Mặc dù tài liệu không chỉ định cách đặt mã hóa ưu tiên. Chức năng là trong mô-đun locale
, vì vậy tôi cần phải thay đổi miền địa phương? Có cách nào đáng tin cậy trên nhiều nền tảng để đặt ngôn ngữ UTF-8 không? Nó sẽ ảnh hưởng đến bất cứ điều gì khác hơn là mã hóa tập tin văn bản mặc định?
Hoặc locale thay đổi này là nguy hiểm (có thể phá vỡ một cái gì đó), và tôi nên dính vào wrapper tùy chỉnh như:
def uopen(*args, **kwargs):
return open(*args, encoding='UTF-8', **kwargs)
Đó là cách phù hợp để bao bọc các chức năng. +1 – user
Tôi đã thử 'locale.setlocale()' và nó không thay đổi mã hóa mặc định trên Windows. Ngay cả với một không phải Unicode khác. Vì vậy, tôi quyết định kiểm tra mã nguồn của CPython và phát hiện ra rằng 'getpreferredencoding' [sử dụng] (https://github.com/python/cpython/blob/f7eae0adfcd4c50034281b2c69f461b43b68db84/Modules/_localemodule.c#L304) [GetACP] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd318070(v=vs.85).aspx) Hàm WinAPI, nó "truy xuất mã nhận dạng trang ANSI của Windows hiện tại". – user
Không có cơ chế trong Python để ghi đè hành vi này ngoại trừ việc sử dụng các hack phụ thuộc phiên bản giống như một gợi ý của Joran trong câu trả lời khác và những câu hỏi được tìm thấy trong câu trả lời cho [câu hỏi này] (https://stackoverflow.com/questions/ 31469707/change-the-locale-ưa thích-mã hóa-in-python-3-trong-windows). Từ những gì tôi đã đọc, cũng không có cơ chế để thiết lập mã hóa này thành UTF-8 trong Windows bên ngoài Python. Do đó, với thực tế là không có cách nào để thiết lập tùy chọn này mà không cần phải hack, tôi đồng ý rằng việc thay đổi điều này có thể không đáng tin cậy. Đã chấp nhận câu trả lời. – user