UnicodeDecodeError nguyên nhân và biện pháp đối phó [Python]
Khi tôi cố đọc tập dữ liệu định dạng tệp csv với pandas, tôi ngay lập tức gặp phải lỗi "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 1: byte bắt đầu không hợp lệ", vì vậy tôi đã hỏi nguyên nhân và giải pháp. Hãy ghi lại nó.
nội dung lỗi
Đọc tệp csv bằng pd.read_csv.Sau đó...
nhập gấu trúc dưới dạng pdf df = pd.read_csv('data.csv')
>> UnicodeDecodeLỗi: codec 'utf-8' không thể giải mã byte 0x91 ở vị trí 1: byte bắt đầu không hợp lệ
Đã xảy ra lỗi giải mã Unicode (chuyển mã ký tự thành ký tự).
Nhân tiện, việc chuyển đổi ký tự thành mã ký tự được gọi là mã hóa.
Lý do
Bên trong máy tính, các ký tự không được nhận dạng như vốn có mà được xử lý dưới dạng số (mã ký tự) được gán trước cho từng ký tự.
Có nhiều phương pháp để mã hóa ký tự, tùy thuộc vào ngôn ngữ và cách gán số. UTF-8 là một trong những phương pháp mã hóa cho Unicode đã được đặt làm tiêu chuẩn toàn cầu thống nhất để nó có thể được sử dụng trong bất kỳ ngôn ngữ nào.
Điều đó nói rằng, UTF-8 dường như cũng không hoàn hảo (Wikipedia:Các vấn đề về Unicode trong môi trường tiếng Nhật)
Tôi không biết ký tự gây ra sự cố, nhưng tệp csv chứa các ký tự tiếng Nhật nên lỗi giải mã Unicode là do không thể chuyển đổi tốt mã ký tự tiếng Nhật và UTF-8. Có vẻ như vậy
giải pháp
Khi đọc bằng read_csv(), hãy chỉ định định dạng mã hóa dưới dạng mã ký tự tiếng Nhật (chẳng hạn như shift_jis) từ đối số.
df = pd.read_csv('data.csv', encoding='shift_jis')
Nó tải tốt bây giờ.
Các định dạng mã hóa khác cho tiếng Nhật
Nhân tiện, có nhiều mã ký tự có thể diễn đạt tiếng Nhật và Python triển khai mã sau đây làm tiêu chuẩn. ( thẩm quyền giải quyết:Danh sách mã hóa tiêu chuẩn Python )
- cp932
- euc_jp, euc_jis_2004, euc_jisx0213
- iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
- iso2022_jp_2004, iso2022_jp_2ext
- shift_jis, shift_jis_2004, shift_jisx0213
Tuy nhiên, tôi có ấn tượng rằng nó có thể được đọc tốt với shift_jis hoặc cp932, phần lớn là chính.
thảo luận
Danh sách các bình luận
cp949 là tiếng Hàn phải không?
Vui lòng sử dụng cp932.
Trích dẫn
cp932 | 932, ms932, mskanji, ms-kanji | Tiếng Nhật
cp949 | 949, ms949, uhc | Hàn Quốc
Cảm ơn vì lời khuyên của bạn.Có vẻ như cột tham chiếu đã bị viết nhầm thành cp949.Tôi sửa nó rồi.
Tôi xin lỗi!giải quyết!
Nó hữu ích