PyScripter でパスに日本語を含むとUnicodeEncodeErrorとなる対応
Python IDE の PyScripter 。Linuxに対応していないのが残念だが、軽量でかなり使いやすい。
ソースコードまでのパスに、日本語(非ASCII文字)が含まれると、PyScripterからの実行、デバッグ実行時に、
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 8-10: ordinal not in range(128)
てなエラーが発生する。
パスに、"テスト"という日本語が含まれるため、エラーとなっている。
python コマンドで実行するなり、ダブルクリックで実行するなり、PyScripter以外からこのファイルを実行する分には問題ない。
まぁ、日本語をパスに含まないようにすればよいのだが、面倒だ。
https://code.google.com/p/pyscripter/issues/detail?id=427
Python のインストールフォルダ直下の Lib フォルダに、site.py ファイルがあるので、これを編集する。
例えば、
C:\Python27\Lib\site.py
をテキストエディタで開き、def setencoding() の最初の if 0: を if 1: に変更する
- def setencoding():
- """Set the string encoding used by the Unicode implementation. The
- default is 'ascii', but if you're willing to experiment, you can
- change this."""
- encoding = "ascii" # Default value set by _PyUnicode_Init()
- ### ↓↓↓ ここを、0 -> 1 に変更
- if 1:
- # Enable to support locale aware default string encodings.
- import locale
- loc = locale.getdefaultlocale()
- if loc[1]:
- encoding = loc[1]
- if 0:
- # Enable to switch off string to Unicode coercion and implicit
- # Unicode to string conversion.
- encoding = "undefined"
- if encoding != "ascii":
- # On Non-Unicode builds this will raise an AttributeError...
- sys.setdefaultencoding(encoding) # Needs Python Unicode build !
実行してみる。
エラーとならずに、実行できた!
。。。はよいが、Python自体の設定を変更しているので、副作用が気になる。
コードを見ると、locale.getdefaultlocale() の 2つめの要素を、sys.setdefaultencoding に与えている。
自分の環境だと、cp932。
- >>> import locale
- >>> locale.getdefaultlocale()
- ('ja_JP', 'cp932')
上記、site.py を編集する前に、sys.getdefaultencoding() を実行すると、ascii が返るが、、、
- >>> import site
- >>> sys.getdefaultencoding()
- 'ascii'
編集後は、cp932 が返るようになる。
- >>> import sys
- >>> sys.getdefaultencoding()
- 'cp932'
http://python.rdy.jp/wiki.cgi?page=japaneseCharset
sys.setdefaultencodingは文字コードのこと考えていない古いソースコードのためにある設定項目なので、これから何か新しいものを書こうとするプログラマが設定する必要はありません。
Pythonは書けないが、海外で作られたアプリやMODユーティリティが UnicodeEncodeError/UnicodeDecodeError で動かないという方は、次のような設定で回避できる場合があります。
方法1:sitecustomize.pyを書き換える
Windows であれば C:\Python27\Lib\site-package\sitecustomize.pyUnix であれば /usr/lib/python2.7/site-package/sitecustomize.py
というファイル[3]に以下の2行を追記してください。ただし、「********」は、お使いのファイルシステムの文字コード(Windowsならcp932、Unixならたぶんutf-8)に置き換えてください。
import sys
sys.setdefaultencoding(‘********’)以上の設定はPython全体で有効です。
とのことなので、設定しても良さそうな感じ。