Python2系の話です。Cygwin環境を前提としています。
PyYAMLというのを使ってYAML形式のファイルを取り込みます。
まずはインストール方法
インストール
http://pyyaml.org/wiki/PyYAML
のZIP Packageをダウンロードして
$ python setup.py install
でインストール。
動作確認してみます。
UTF-8で文字列をコード内ではUnicode型で扱うようなコードを書いてみます。
YAMLのファイルはこんな感じ
test.yaml
さとしくん: - 年齢 : 29 - 身長 : 150cm - 体重 : 49kg まつこさん: - 年齢 : 48 - 身長 : 170cm - 体重 : 119kg
次のプログラムで読ませます。
うまくいかないケース
実行結果
$ ./l1.py {u'\u307e\u3064\u3053\u3055\u3093': [{u'\u5e74\u9f62': 48}, {u'\u8eab\u9577': '170cm'}, {u'\u4f53\u91cd': '119kg'}], u'\u3055\u3068\u3057\u304f\u3093': [{u'\u5e74\u9f62': 29}, {u'\u8eab\u9577': '150cm'}, {u'\u4f53\u91cd': '49kg'}]}
あら、…一部がstr型のままになってます。うまくいかないようです…どうも、デフォルトのままだとloadしたときにUnicode型で返してくれないようです。
なので、以下のようにデフォルトのハンドラーを書き換えます。
うまくいくケース
実行結果
$ ./l2.py {u'\u307e\u3064\u3053\u3055\u3093': [{u'\u5e74\u9f62': 48}, {u'\u8eab\u9577': u'170cm'}, {u'\u4f53\u91cd': u'119kg'}], u'\u3055\u3068\u3057\u304f\u3093': [{u'\u5e74\u9f62': 29}, {u'\u8eab\u9577': u'150cm'}, {u'\u4f53\u91cd': u'49kg'}]}
うまくいきました。