Tôi đang đọc trong tệp có mô-đun csv
của Python và có Câu hỏi mã hóa khác (xin lỗi, có quá nhiều ở đây).Python csv: UnicodeDecodeError
Trong tệp CSV, có các dấu hiệu £. Sau khi đọc hàng và in nó, chúng đã trở thành \ xa3.
Đang cố gắng để mã hóa chúng như Unicode tạo ra một UnicodeDecodeError
:
row = [unicode(x.strip()) for x in row]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 0: ordinal not in range(128)
Tôi đã được đọc csv documentation và rất nhiều những câu hỏi khác về vấn đề này trên StackOverflow. Tôi nghĩ rằng rằng £ trở thành \ xa3 trong ASCII có nghĩa là tệp CSV ban đầu ở dạng UTF-8.
(Ngẫu nhiên, là có một cách nhanh chóng để kiểm tra mã hóa về tệp CSV?)
Nếu đó là trong UTF-8, sau đó không nên module csv có thể để đối phó với nó? Dường như chuyển đổi tất cả các ký hiệu thành ASCII, mặc dù tài liệu cho rằng nó chấp nhận UTF-8.
Tôi đã thử thêm chức năng unicode_csv_reader
như được mô tả trong csv examples, nhưng không hiệu quả.
---- CHỈNH SỬA -----
Tôi nên làm rõ một điều. Tôi đã thấy this question, trông rất giống nhau. Nhưng thêm unicode_csv_reader
chức năng xác định có tạo ra một lỗi khác nhau thay vì:
yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte
Vì vậy, có lẽ tập tin của tôi không phải là UTF8 sau khi tất cả? Làm thế nào tôi có thể nói?
Bạn có nghĩa là sử dụng: năng suất [unicode (di động, 'tiêu chuẩn ISO-8859-1') cho các tế bào trong hàng] thay vào đó, trong hàm unicode_csv_reader? Thật không may mà không giúp đỡ - trở lại lỗi thứ tự không trong phạm vi (128) một lần nữa. – AP257
Sẽ không có ý nghĩa gì khi sử dụng hàm unicode() khi giao dịch với ASCII. Những gì tôi đang nói là bạn đang đối phó với một tập tin được mã hóa bằng cách sử dụng một mã hóa "ISO-8859-1".Tôi đã không đăng bất kỳ mã nào, bởi vì tôi không biết làm thế nào để làm điều đó ra khỏi đỉnh đầu của tôi, nhưng vấn đề của bạn là bạn cần phải giải mã nó như là ISO-8859-1, không phải Unicode. – riwalk
OK, cảm ơn. Tôi sẽ điều tra. Làm thế nào bạn biết nó là ISO-8859-1? Nói cách khác, có cách nào để tôi kiểm tra mã hóa bản thân mình, thay vì chỉ hỏi những câu hỏi ngu ngốc trên StackOverflow :) – AP257