1. 程式人生 > >'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte

覺得有用的話,歡迎一起討論相互學習~Follow Me

今天使用語句

image_raw_data_jpg = tf.gfile.FastGFile('../test_images/test_1.jpg', 'r').read()

讀取圖片檔案的時候遇到了以下問題:

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

原因:

0x92 即 10010010,UTF8 中編碼一個字元的第一個位元組(start byte)只可能是 0xxxxxxx、110xxxxx、1110xxx、11110xxx……而後面的位元組只可能是 10xxxxxx。也就是說 0x92 只能作為後面的位元組,卻出現在了第一個位元組的位置。

出現這種問題絕大部分情況是因為檔案不是 UTF8 編碼的(例如,可能是 GBK 編碼的),而系統預設採用 UTF8 解碼。解決方法是改為對應的解碼方式。

極少數情況是因為檔案損壞了或者和一部分非 UTF8 編碼混在一起,可以修復檔案或採用 replace 等方式解碼。

解決方案

將’r’改為’rb’的形式,即:

image_raw_data_jpg = tf.gfile.FastGFile('../test_images/test_1.jpg', 'rb').read()

參考文獻: