動かざることバグの如し

近づきたいよ 君の理想に

Pythonで日本語扱おうとしたら槍投げられて死んだ

pythonのデフォルトエンコーディングUTF-8に変更する

こんなエラーが出る

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 107: 

どうも調べてみると、Pythonのデフォルトエンコーディングはなんと「ascii」!頼むから死んでくれ

sitecustomize.pyというファイルに以下を追記すればおk

import sys
sys.setdefaultencoding('utf-8')

問題はsitecustomize.pyがどこにあるか一概にいえない点。Ubuntu14.04だと/etc/python2.7/sitecustomize.pyだったけどsudo find / -name sitecustomize.pyしたほうが吉

最後に確認

import sys
sys.getdefaultencoding()

日本語を含む変数をprintしようとすると文字化けする

PHPでいうvar_dumpRubyでいうならporppに該当するメソッドはどうやらPythonにはないらしい

>>> print ['あ', 'い', 'う']
['\xe3\x81\x82', '\xe3\x81\x84', '\xe3\x81\x86']

どうもPython2.xの仕様とのこと。死にかけていたところに以下のサイトを発見

Pythonで日本語を含んだリストと辞書をpretty printしたい件 | taichino.com

リンク先より

sudo easy_install prettyprint

使うときは以下のようにすると

# -*- coding: utf-8 -*-
from prettyprint import pp, pp_str

pp(['あ', 'い', 'う'])

綺麗に出力される

user@ubuntu:/tmp$ python a.py 
[
    "あ", 
    "い", 
    "う"
]