1. ホーム
  2. パイソン

[解決済み] エラー UnicodeDecodeError: 'utf-8' コーデックが位置 0 のバイト 0xff をデコードできない: 開始バイトが無効です。

2022-04-19 04:42:05

質問内容

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は、バイト配列(a)(b)(c)を変換しようとします。 bytes これは、utf-8 エンコードされた文字列であると仮定しています) をユニコード文字列 ( str ). この処理はもちろん、utf-8のルールに従ったデコードである。 このとき、utf-8エンコードされた文字列では許されないバイト列(すなわち、この0xffの位置)に遭遇します。

コードをお見せいただけなかったので、あとは推測するしかありません。

スタックトレースから、トリガーとなったアクションは、ファイルからの読み込みだと推測できます ( contents = open(path).read() ). これを次のような形で再コード化することを提案します。

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

その b の中のモード指定子で open() は、ファイルをバイナリとして扱うことを述べているので contents のままとなります。 bytes . この方法では、デコードの試みは起こりません。