python chardetでエンコーディング(encoding)を判定する
課題 with open("textfile.txt", "r", encoding="sjis") as f: tmp = f.read() UnicodeEncodeError: 'shift_jis' codec can't encode character '\uff5e' in position 4807: illegal multibyte sequence というエラーが出て読み込みに失敗する場合がある。 原因 encoding の指定が適切でない。 解決 chardetでエンコーディングを判定する pythonの chardet というパッケージを使うとバイト列から文字コードを推定することができる。 まずはインストール。 python -m pip install chardet とりあえずバイトデータのまま読み込んで chardet で解析。 with open("textfile.txt", "rb") as f: bytestring = f.read() # バイト文字列 result = chardet.detect(bytestring) resultは {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} で99%の確率で utf-8 ということがわかる。 そうしたらバイト列をデコードする string = bytestring.decode(result["encoding"]) これで元の文字列を得ることができる。 文字コード この問題はoutlookの ....