web-dev-qa-db-ja.com

UnicodeDecodeError: 'charmap'コーデックは位置YのバイトXをデコードできません:文字は<未定義>にマップされます

私はPython 3プログラムに情報を詰め込んだテキストファイルでいくつかの操作をさせようとしています。しかし、ファイルを読み込もうとすると、次のエラーが発生します。

トレースバック(最新のコールが最後)
ファイル "SCRIPT LOCATION"、行番号、
text = file.read()
デコード中のファイル "C:\ Python31\lib\encodings\cp1252.py"、23行目
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap'コーデックは、位置2907500のバイト0x90をデコードできません:文字は<undefined>にマップされます

誰かが私にこの問題を乗り越えるための手助けをすることができたら私は最も感謝するでしょう。

357
Eden Crow

問題のファイルはCP1252エンコーディングを使用していません。別のエンコーディングを使用しています。どちらを自分で把握する必要があります。一般的なものはLatin-1UTF-8です。 0x90 は実際にはLatin-1内では何も意味していないので、UTF-8(ここで 0x90 は継続バイト)の方が一般的です。

ファイルを開くときにエンコーディングを指定します。

file = open(filename, encoding="utf8")
623
Lennart Regebro

@LennartRegebroの拡張として、答えは:

それがどんなエンコーディングであるのかわからず、上の解決法がうまくいかない(それはutf8ではない)そしてあなたがただ推測するだけであることに気づいたなら - オンラインツール エンコーディングが何かを識別するために使うことができる。完璧ではありませんが、通常はうまく機能します。エンコーディングを考え出したら、上記の解決策を使用できるはずです。

編集:(コメントからコピーされた)

非常にポピュラーなテキストエディタSublime Textは、エンコーディングが設定されていればそれを表示するコマンドを持っています...

  1. View - > Show Console(または Ctrl+`

enter image description here

  1. 一番下のview.encoding()のフィールドに入力して、最高のものを期待してください(私はUndefined以外に何も手に入れることができませんでしたが、多分あなたはもっと幸運になるでしょう...)

enter image description here

31

file = open(filename, encoding="utf8")が機能しない場合のために追加するためだけにfile = open(filename, errors='ignore')を試してください

22
Declan Nnadozie

または、ファイルをWebサイトにアップロードするなど、ファイルをデコードする必要がない場合は、open(filename, 'rb')。 r =読み取り、b =バイナリ

1
Kyle Parisi