2014-11-30 15 views
6

Tôi muốn đọc tệp csv và xử lý một số cột nhưng tôi vẫn gặp sự cố. Bị mắc kẹt với các lỗi sau:'utf-8' codec không thể giải mã byte 0x89

Traceback (most recent call last): 
    File "C:\Users\Sven\Desktop\Python\read csv.py", line 5, in <module> 
    for row in reader: 
    File "C:\Python34\lib\codecs.py", line 313, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 446: invalid start byte 
>>> 

Mã My

import csv 
with open("c:\\Users\\Sven\\Desktop\\relaties 24112014.csv",newline='', encoding="utf8") as f: 
    reader = csv.reader(f,delimiter=';',quotechar='|') 
    #print(sum(1 for row in reader)) 
    for row in reader: 
     print(row) 
     if row: 
      value = row[6] 
      value = value.replace('(', '') 
      value = value.replace(')', '') 
      value = value.replace(' ', '') 
      value = value.replace('.', '') 
      value = value.replace('0032', '0') 
      if len(value) > 0: 
       print(value + ' Length: ' + str(len(value))) 

Tôi là một người mới bắt đầu với Python, thử googling, nhưng khó có thể tìm ra giải pháp đúng.

Có ai có thể giúp tôi không?

+1

bạn có thể chia sẻ tệp csv hoặc một phần của tệp không? – user1767754

+5

Bạn có chắc chắn rằng tệp của bạn được * thực sự * được mã hóa với UTF-8 không? Hãy thử ''cp1252'' nếu tệp đến từ Excel ở một quốc gia phương Tây. Tất cả các mã hóa được hỗ trợ: https://docs.python.org/2/library/codecs.html#standard-encodings –

+1

Tại sao bạn mở tệp dưới dạng UTF-8? Bạn có chắc chắn đó là codec chính xác cho tệp đó không? –

Trả lời

3

Đây là đầu mối quan trọng nhất:

invalid start byte

\x89 không phải là, như đề xuất trong các ý kiến, một hợp lệ UTF-8 byte. Nó hoàn toàn hợp lệ tiếp tục byte. Có nghĩa là nếu nó đi theo giá trị byte đúng, nó mã UTF-8 một cách chính xác:

http://hexutf8.com/?q=0xc90x89

Vì vậy, hoặc là bạn (1) không có dữ liệu UTF-8 như bạn mong đợi, hoặc (2) bạn có một số bị thay đổi Dữ liệu UTF-8. Codec Python đơn giản cho bạn biết rằng nó gặp phải \x89 theo thứ tự sai trong chuỗi.

(Thông tin thêm về byte liên tục tại đây: http://en.wikipedia.org/wiki/UTF-8#Codepage_layout)

+0

Bạn sẽ khuyên bạn nên chẩn đoán điều gì cần làm tiếp theo? – ScottieB

Các vấn đề liên quan