1. ホーム
  2. python

[解決済み] UnicodeDecodeError: 'charmap' コーデックは位置 XXX のバイト 0x8f をデコードできません: char

2022-02-19 23:01:13

質問

Pythonスクリプトから1つのログファイルを読み込もうとしています。私のプログラムはLinuxでは正常に動作しますが、Windowsではエラーが発生します。特定の行番号でいくつかの行を読んだ後、次のエラーが発生します。

  File "C:\Python\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 311: char
acter maps to <undefined> 

以下は、ファイルを読み込むために使用しているコードです。

with open(log_file, 'r') as log_file_fh:
    for line in log_file_fh:
        print(line)

私はascii、utf8、utf-8、ISO-8859-1、cp1252、cp850として異なるエンコーディングモードを使用して、それを修正しようとしました。 しかし、まだ同じ問題に直面しています。 この問題を解決する方法はありますか?

解決方法は?

Pythonスクリプトで読み込みたいログファイルは、欧米言語でエンコードされています。 以下のリンクを参照してください。 https://docs.python.org/2.4/lib/standard-encodings.html 私はエンコードモードとして'cp850'を使用し、これは私のために動作しました。

with open(log_file, 'r',encoding='cp850') as log_file_fh:
    for line in log_file_fh:
        print(line)

しかし、西ヨーロッパでは、多くのコーデックがそのサイトで利用可能です。 私は、これは正しい解決策ではないと思います。 ほとんどの開発者は、'cp850'モードを使用しないように提案しています。

エンコードエラーを処理する最良の方法は、ファイルを開くときにerrors引数を追加し、プロパティとして「無視」を与えることです。

with open(log_file, 'r',errors='ignore') as log_file_fh:
    for line in log_file_fh:
        print(line)