Tôi đang làm việc trên một công cụ Python phải có khả năng mở các tệp mã hóa UTF-8 và UTF-16. Trong Python 3.2, tôi sử dụng đoạn mã sau để thử mở các tập tin sử dụng UTF-8, sau đó thử nó với UTF-16 nếu có một lỗi unicode:Làm cách nào để mở các tệp UTF-16 trên Python 2.x?
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(open(filepath,'r',encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(open(filepath,'r',encoding='utf-16'))
(readGridFromFile
hoặc sẽ chạy qua để hoàn thành, hoặc huy động . một UnicodeDecodeError
)
Tuy nhiên, khi tôi chạy mã này trong Python 2.x, tôi nhận được:
TypeError: 'encoding' is an invalid keyword argument for this function
tôi thấy trong các tài liệu mà Python 2.x của open()
không có một từ khóa encoding
. Có cách nào xung quanh này sẽ cho phép tôi để làm cho mã của tôi Python 2.x tương thích?
Cuộc gọi tốt, 'io.open' là tùy chọn tốt hơn. Tuy nhiên, nhược điểm của 'codecs.open' không thực sự đủ quan trọng để gọi nó là" không phù hợp ", IMHO. –
Nhân tiện, tuyên bố về 'codecs.open' không xử lý BOM đúng là sai (tôi đã thử). Những điều về nó không tự động chuyển đổi dòng mới là đúng, mặc dù (nhưng điều này có vẻ là sự khác biệt duy nhất). –
Tôi đã thử lại bây giờ - cho UTF-16 BE/LE nó hoạt động khá tốt, nhưng đối với UTF8, BOM (EB BB BF) của nó được để lại trong văn bản đã giải mã là u '\ ubeff'. Tôi nhớ rõ ràng tôi đã giải mã các vấn đề với BOM bằng cách sử dụng '.decode()' trên Windows, nhưng bây giờ tôi không thể kiểm tra nó. Tôi đã cố định yêu cầu đó cho sự công bằng. – toriningen