Published on

UnicodeEncodeError when running python scripts in Atom.io

何?

Atom の script-plugin で python 実行時に sys.stdout の encoding が US-ASCII になっていたので,print()などでUnicodeEncodeErrorが出る.

どうする?

  • __init__.pyなどで stdout の encoding を変更する.
  import sys
  import io
  sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  • Atom.app から起動時には,環境変数をログインシェルから読むみたいなので,例えば.bash_profileexport LANG='en_US.UTF-8'などと書いておく.

経緯

python3.4 を pyenv global で設定していたのに,atom の script-plugin では OSX の python2.7.9 が使われるのはなんでだろう,と思っていた. 普段は iterm2 で zsh を起動するようにしていたので,ログインシェル(bash)の設定ファイルへ環境を反映していなかったのが原因だった.