May 6, 2015

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)の設定ファイルへ環境を反映していなかったのが原因だった.

©2011-2018 tuxedocat