#pyperclipで日本語が使えない
『退屈なことはpythonにやらせよう』を読んでます。
この中で、pyperclipを使用するサンプルプログラムがあるんですが、日本語を使用するとエラーで動作しませんでした。
エラーは以下みたいなやつでした。(すみません、最後らへんは覚えてないです)
「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 0: ~~~~」
##原因
- python2.7の使用
- VS Codeでpythonを実行
以上の2点でした。
本家サイトのissueを見ると中国語はサポートしてないの?っていうのがあって、その中で中国語で動作しないっていうのを報告されてました。
ただ、「エンコードをutf-8指定すると動作するよ〜」とも報告されていて、私の環境でも同じようにすると動作しました。
しかし、別の方が「エンコード指定しなくても動くよ〜」って報告されていました。
私の環境ではエンコード指定しないと動作しない・・・
なぜ!!
##調査
import sys
print('defaultencoding:', sys.getdefaultencoding())
上記コードでどのエンコードが指定されているかを調査!
結果、「ascii」!
なぜ!!
python3入れて、python3で実行させとるやろ!!
VS Codeのタスクランナーで実行させてたので、どのコマンド実行させてるか見ると・・・「python」の文字!
python3じゃ無い!!
python3に変えて、もう一回デフォルトエンコードを調査!
「utf-8」の文字!
pyperclipを実行!
同じエラーで落ちる!!
VS Codeで実行させるのが悪いのかと思い、ターミナルで実行!
無事できました!!
というわけで、原因を特定しました。
VS Codeだとなぜ実行できないのかは分からないです。。。
pythonの勉強を始めたばかりなので、おかしいところがあればご指摘ください!
2017/06/29:追記
VS Codeだとエラーになる原因ですが、どうやらVS Codeがasciiに変換しちゃってるらしい。
github見ると、いっぱいissue立ってた。
開発者側が提示する解決策だと、「task.json」に「"runner": "terminal"」の一文を足せとのこと。
要は、ターミナルで実行させればエラーにならないんだから、ターミナルで実行させればいいじゃんってことですね。
私の環境では、これでtaskでpython実行でもエラーが起こることはなくなりました。
修正できない感じなのかな・・・?