#背景
Kivy を使用し、 .kv ファイルで記述したGUIを Windows 環境で動作させようとしたところ、UnicodeDecodeError が発生し、起動に失敗した。
エラーメッセージは以下。
UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 174: illegal multibyte sequence
#環境
- OS:Windows10
- Python:3.5.4 (Anaconda3)
- Kivy:1.10
#対処
Kivy の bulider.py を一部変更。
ファイルは(自分の場合は)以下の場所にあった。
C:\Users\[ユーザー名]\Anaconda3\envs\[環境名]\Lib\site-packages\kivy\lang\builder.py
#変更内容
builder.py 内、 load_file 関数の以下の箇所を編集。
kivy 1.10.0 の場合は 288行目。
##変更前
with open(filename, 'r') as fd:
##変更後
with open(filename, 'r', encoding='utf8') as fd:
上記変更にて、正常に動作することを確認した。
#原因
(推測だが)Windows でファイルを開く場合、自動的にShuft-JIS(cp932)として解釈される、しかしファイルはUTF8で記述されているため、エンコードに失敗した。
対処として、UTF8としてファイル指定し開くと問題なく開くことができる。
なお、これの対応を行ってしまった場合、万一、Shift-JIS や ECU-JP で.kvファイルを記述した場合、エラーが発生する可能性がある。(そもそも Python スクリプト書くなら UTF8 使うべきだとは思う‥)