簡體   English   中英

“utf-8”編解碼器無法解碼字節 0x89

[英]'utf-8' codec can't decode byte 0x89

我想讀取一個 csv 文件並處理一些列,但我一直遇到問題。 遇到以下錯誤:

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
>>> 

我的代碼

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)))

我是 Python 的初學者,嘗試過谷歌搜索,但很難找到正確的解決方案。

誰能幫我嗎?

這是最重要的線索:

無效的起始字節

\\x89不是,如評論中所建議的,是無效的 UTF-8 字節。 它是一個完全有效的連續字節。 意思是如果它遵循正確的字節值,它會正確編碼 UTF-8:

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

因此,要么您 (1) 沒有您期望的 UTF-8 數據,要么 (2) 您有一些格式錯誤的 UTF-8 數據。 Python 編解碼器只是讓您知道它在序列中以錯誤的順序遇到了\\x89

(更多關於連續字節的信息: http : //en.wikipedia.org/wiki/UTF-8#Codepage_layout

.PNG 文件的第一個字節是 0x89 並不是說這是您的問題,但是 .PNG 標頭是專門設計的,因此不會意外地將其解釋為 text

我不知道為什么你會有一個實際上是 .png 的 .csv 文件。 但如果有人不小心重命名了文件,這肯定會發生。 在 Windows 10 上,由於其愚蠢的復選框功能,我偶爾會不小心對文件進行批量重命名。 為什么 Microsoft 決定台式機具有與平板電腦相同的 UI 控件是我的好主意……我不知道。

在嘗試讀取或上傳以下類型的文件時,我也遇到了類似的錯誤:

  1. CSV文件
  2. JPEG文件
  3. PNG文件
  4. 壓縮文件

避免錯誤的最佳方法,例如:

  1. “utf-8”編解碼器無法解碼字節 0x89
  2. “utf-8”編解碼器無法解碼字節 0xff

是將這些文件作為字節讀取。 當您將它們視為字節時,您無需在此處提供任何編碼值。 因此,當您打開它們時,您應該指定:

with open(file_path, 'rb') as file:

或者在你的情況下,代碼應該是這樣的:

import csv

with open("c:\\\\Users\\\\Sven\\\\Desktop\\\\relaties 24112014.csv", newline='', 'rb') as f:

reader = csv.reader(f,delimiter=';',quotechar='|')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM