簡體   English   中英

錯誤 UnicodeDecodeError:'utf-8' 編解碼器無法解碼 position 中的字節 0xff 0:起始字節無效

[英]error UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools

在上述站點上編譯“process.py”時發生錯誤。

 python tools/process.py --input_dir data --            operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png

追溯(最近一次通話):

File "tools/process.py", line 235, in <module>
  main()
File "tools/process.py", line 167, in main
  src = load(src_path)
File "tools/process.py", line 113, in load
  contents = open(path).read()
      File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode
  (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode     byte 0xff in position 0: invalid start byte

錯誤的原因是什么? Python 的版本是 3.5.2。

Python 嘗試將bytes數組(它假定為 utf-8 編碼字符串的字節)轉換為 unicode 字符串( str )。 這個過程當然是按照utf-8規則進行解碼。 當它嘗試這樣做時,它遇到了一個 utf-8 編碼字符串中不允許的字節序列(即位置 0 處的這個 0xff)。

由於您沒有提供任何我們可以查看的代碼,我們只能猜測其余部分。

從堆棧跟蹤中,我們可以假設觸發操作是從文件中讀取( contents = open(path).read() )。 我建議以這樣的方式重新編碼:

with open(path, 'rb') as f:
  contents = f.read()

open()中模式說明符中的b表明文件應被視為二進制文件,因此contents將保持為bytes 這種方式不會發生解碼嘗試。

使用此解決方案,它將刪除(忽略)字符並返回沒有它們的字符串。 僅當您需要剝離它們而不是轉換它們時才使用它。

with open(path, encoding="utf8", errors='ignore') as f:

使用errors='ignore'你只會丟失一些字符。 但是如果您不關心它們,因為它們似乎是源自連接到我的套接字服務器的客戶端的錯誤格式和編程的額外字符。 然后它是一個簡單的直接解決方案。 參考

使用編碼格式ISO-8859-1來解決這個問題。

有類似的問題,最終使用 UTF-16 進行解碼。 我的代碼如下。

with open(path_to_file,'rb') as f:
    contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")

這會將文件內容作為導入,但它會以 UTF 格式返回代碼。 從那里它將被解碼並按行分隔。

我在遇到同樣的錯誤時遇到了這個線程,經過一些研究我可以確認,這是當您嘗試使用 UTF-8 解碼 UTF-16 文件時發生的錯誤。

對於 UTF-16,第一個字符(在 UTF-16 中為 2 個字節)是一個字節順序標記 (BOM) ,它用作解碼提示,在解碼后的字符串中不顯示為字符。 這意味着第一個字節將是 FE 或 FF,第二個字節是另一個。

在我找到真正的答案后進行了大量編輯

這是由於讀取文件時的編碼方法不同。 在 python 中,它默認使用 unicode 對數據進行編碼。 但是,它可能不適用於各種平台。

我提出了一種編碼方法,如果 'utf-8' 不起作用,它可以幫助你解決這個問題。

with open(path, newline='', encoding='cp1252') as csvfile:
    reader = csv.reader(csvfile)

如果您在此處更改編碼方法,它應該可以工作。 此外,如果上述方法不適合您,您可以在standard-encodings找到其他編碼方法。

我對PNG文件也有類似的問題。 我嘗試了上面的解決方案但沒有成功。 這個在python 3.8中為我工作

with open(path, "rb") as f:

僅使用

base64.b64decode(a) 

代替

base64.b64decode(a).decode('utf-8')

它只是意味着一個人選擇了錯誤的編碼來讀取文件。

在 Mac 上,使用file -I file.txt來查找正確的編碼。 在 Linux 上,使用file -i file.txt

那些在處理 Pandas 的數據幀時遇到類似錯誤的人使用以下解決方案。

示例解決方案。

df = pd.read_csv("File path", encoding='cp1252')

我在嘗試使用pandas.read_csv()讀取“.csv”文件時遇到了這個UnicodeDecodeError 就我而言,我無法使用其他編碼器類型來克服這個問題。 但不是使用

pd.read_csv(filename, delimiter=';')

我用了:

pd.read_csv(open(filename, 'r'), delimiter=';')

這對我來說似乎很好。

請注意:在open()函數中,使用'r'而不是'rb' 因為'rb'返回的bytes對象首先導致發生此解碼器錯誤,所以read_csv()中的問題相同。 但是'r'返回str ,因為我們的數據位於.csv中,並且使用默認的encoding='utf-8'參數,我們可以使用read_csv()函數輕松解析數據。

如果您使用的是 Mac,請檢查是否有隱藏文件 .DS_Store。 刪除文件后,我的程序工作了。

如果您從串口接收數據,請確保使用正確的波特率(和其他配置):使用( utf-8 )解碼,但錯誤的配置會產生相同的錯誤

UnicodeDecodeError:“utf-8”編解碼器無法解碼位置 0 的字節 0xff:無效的起始字節

在 linux 上檢查你的串口配置: stty -F /dev/ttyUSBX -a

我有一個類似的問題,並在整個互聯網上搜索了這個問題

如果您遇到此問題,只需將您的 HTML 代碼復制到一個新的 HTML 文件中並使用普通的<meta charset="UTF-8">即可。...

只需在同一位置創建一個新的 HTML 文件並使用不同的名稱

檢查要讀取的文件的路徑。 我的代碼一直給我錯誤,直到我將路徑名更改為當前工作目錄。 錯誤是:

newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

您必須使用 latin1 編碼來讀取此文件,因為此文件中有一些特殊字符,請使用以下代碼片段來讀取文件。

這里的問題是編碼類型。 當 Python 無法轉換要讀取的數據時,會報錯。

您可以使用 latin1 或其他編碼值。

我說嘗試和測試為您的數據集找到合適的。

我有一個類似的問題。

通過以下方式解決了它:

import io

with io.open(filename, 'r', encoding='utf-8') as fn:
  lines = fn.readlines()

但是,我遇到了另一個問題。 一些 html 文件(在我的情況下)不是 utf-8,所以我收到了類似的錯誤。 當我排除那些 html 文件時,一切都很順利。

因此,除了修復代碼之外,還要檢查您正在讀取的文件,也許確實存在不兼容性。

處理從 Linux 生成的文件時,我遇到了同樣的問題。 事實證明它與包含問號的文件有關..

以下代碼適用於我的情況:

df = pd.read_csv(文件名,sep = '\t',編碼='cp1252')

此處,您應該首先加載“ GoogleNews-vectors-negative300.bin.gz”文件,然后通過以下命令在Ubuntu中將其解壓縮:gunzip -k GoogleNews-vectors-negative300.bin.gz。 [從不建議手動提取]。 其次,您應該在pyrhon 3中應用以下命令:

import gensim model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True) . 我希望它會有用。

如果可能,請在文本編輯器中打開文件並嘗試將編碼更改為 UTF-8。 否則在操作系統級別以編程方式進行。

我有一個類似的問題。 我嘗試在 tensorflow/models/objective_detection 中運行一個示例並遇到相同的消息。 嘗試將 Python3 更改為 Python2

暫無
暫無

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

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