概要
- Pythonista 3でUTF-8が含まれるファイルを迂闊に
open
するとエラーが出る - Pythonista 3では
open
時にencoding='utf-8'
の明示的指定が必要 - このエラーが発生するのはPython 3における
open
の仕様による - Pythonista 3でもこの仕様によるエラーが発生する環境である
発生した環境
Pythonista 3 (バージョン3.4)
起きたこと
以下のコードをPythonista 3上で実行させ、
日本語ファイル(UTF-8)を読みこませようとするとエラーが発生する。
file_name = 'japanese_utf-8_file.txt'
with `open`(file_name) as f:
print(f.read())
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 171: ordinal not in range(128)
0xe3とpositionの後の数値は読み込ませたファイルによって異なる。
原因
どうやらUTF-8ファイルをUS-ASCIIファイルと勘違いして、
無理にデコードしようとしてエラーになっている模様。
なおこの事象はPython 3におけるopen
の仕様である。
たまたまこの仕様がPythonista 3の環境でこうなったというだけである。
気付いた理由
エラー表示の変数(Vars)の項目で、ファイルオブジェクトのencodingが'UTF-8'
ではなく
'US-ASCII'
になっていたことで気付いた。
対策
以下のように、open
の際にencoding='utf-8'
を付けるとエラーが出なくなる。
file_name = 'japanese_utf-8_file.txt'
with `open`(file_name, encoding='utf-8') as f:
print(f.read())
結論
-
open
でのUnicodeDecodeError問題はPythonista 3でも発生する -
open
の際はencoding='utf-8'
を付ける
参考資料
直接参考にした資料のみ記載。
Python 3の文字コード関連についてはQiitaを探せばいろいろと出てくる。
-
https://qiita.com/Doremi_chan/questions/108db8c500a1679bf979
この現象に関する質問 -
https://qiita.com/tell-k/items/9320338a7fbc7dcd52d4
現象の背景及び解決法
その他
今更だし車輪の再発明の気もするが、Pythonista 3で直接この件について
言及した記事が見つからなかったので作成してみた。