yam’s Lab

ハマったこと、学んだことを備忘録として記事にします。主にC++,Qt,ROS,Pythonについて取り扱います。

pathlib read_text()の日本語ファイルのエンコードエラーを解決

長らくos.pathを使っていたのですが最近pathlibに移行しました。
まだ使い慣れていませんが、pathlibはかなり楽でびっくりしました!

そんなわけで、今回はpathlibのread_text()でunicodeを含むファイルの読み込み時に遭遇したエラーの解決手順を記載します。
私はjsonファイルの読み込みで遭遇しましたが、txtファイルやcsvファイルの読み込みでも同様の問題に遭遇すると思います。

余談ですが、pythonで多言語対応したスクリプト向けにConfigファイルの設定値に従い文字列を表示するリポジトリを公開しました。
github.com


環境
OS:Windows10
Python:3.6.8

エラー内容

from pathlib import Path
file_path = Path("tset.json")
data = file_path.read_text()
  File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\pathlib.py", line 1197, in read_text
    return f.read()
UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 20: illegal multibyte sequence

解決策

read_textの引数であるencodingに"utf-8"を設定します。

from pathlib import Path
file_path = Path("tset.json")
data = file_path.read_text(encoding="utf-8"))

これでエラーが発生せず、日本語が読めるようになりました。

原因と対策

デフォルト設定ではファイル内に含まれるcp932という文字コード(日本語を含む)はデコードできないということです。
日本語文字コードが読めるようになれば良いので"utf-8"でエンコードされているファイルであることをread_textに知らせます。