エラー UnicodeDecodeError: 'utf-8' コーデックは位置 0 のバイト 0xff をデコードできません: 開始バイトが無効です 質問する

エラー UnicodeDecodeError: 'utf-8' コーデックは位置 0 のバイト 0xff をデコードできません: 開始バイトが無効です 質問する

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

上記サイトで「process.py」をコンパイルする際にエラーが発生しました。

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

Traceback (most recent call last):
  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 です。

ベストアンサー1

Python はバイト配列 ( bytesUTF-8 でエンコードされた文字列であると想定される) を Unicode 文字列 ( str) に変換しようとします。このプロセスは、もちろん UTF-8 ルールに従ったデコードです。これを試みると、UTF-8 でエンコードされた文字列では許可されていないバイト シーケンス (つまり、位置 0 の 0xff) に遭遇します。

確認できるコードが提供されなかったため、残りについては推測することしかできませんでした。

スタック トレースから、トリガーとなるアクションはファイル ( contents = open(path).read()) からの読み取りであると推測できます。これを次のように再コーディングすることを提案します。

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

bのモード指定子では、ファイルopen()はバイナリとして扱われる必要があると指定されているため、contentsのままになりますbytes。この方法ではデコードの試行は行われません。

おすすめ記事