Hai câu hỏi ở đây. Tôi có một tập hợp các tệp thường là UTF-8 với BOM. Tôi muốn chuyển đổi chúng (lý tưởng là tại chỗ) thành UTF-8 mà không có BOM. Có vẻ như codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)
sẽ xử lý điều này. Nhưng tôi không thực sự thấy bất kỳ ví dụ tốt nào về cách sử dụng. Đây có phải là cách tốt nhất để xử lý điều này không?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
Ngoài ra, sẽ là lý tưởng nếu chúng ta có thể xử lý các mã hóa đầu vào khác nhau một cách rõ ràng khi biết (xem ASCII và UTF-16). Có vẻ như điều này sẽ khả thi. Có giải pháp nào có thể nhận bất kỳ mã hóa và đầu ra Python nào đã biết dưới dạng UTF-8 mà không cần BOM không?
chỉnh sửa 1 sol'n được đề xuất từ bên dưới (cảm ơn!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
Điều này mang lại cho tôi lỗi sau:
IOError: [Errno 9] Bad file descriptor
Newsflash
Tôi được cho biết trong các bình luận rằng lỗi là tôi mở tệp bằng chế độ 'rw' thay vì 'r +' / 'r + b', vì vậy cuối cùng tôi nên chỉnh sửa lại câu hỏi của mình và xóa phần đã giải.
r+
chế độ. Thêmb
quá để nó cũng sẽ hoạt động trên Windows mà không có bất kỳ kinh doanh kết thúc dòng vui nhộn nào. Cuối cùng, bạn sẽ muốn quay lại phần đầu của tệp và cắt ngắn nó ở phần cuối - vui lòng xem câu trả lời cập nhật của tôi.