ファイル保存のエラー

解決するべき問題のメモ。
日本語文字列をファイルに書き込もうとするとエラーになる。

# coding: utf-8

str_uni_exp = u"あいうえお"
output = open("test.dat", 'w')

S = "%s\n" % str_uni_exp
output.write(S)
output.close()

print str_uni_exp

上のソースの実行結果。

Traceback (most recent call last):
  File "C:\Documents and Settings\test.py", line 7, in <module>
    output.write(S)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

ASCII文字では問題ないのに。

検索して解決。"python write unicode"で検索、発見。
http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html

# coding: utf-8

import codecs

str_uni_exp = u"あいうえお"
output = codecs.open("test.dat", 'w', 'utf-8')
print type(str_uni_exp)

S = "%s\n" % str_uni_exp
output.write(S)
output.close()

これでOK。

で、読み込み。

import codecs
input = codecs.open("test.dat", 'r', 'utf-8')
S = input.readlines()

print S
input.close()

結果は、

[u'\u3042\u3044\u3046\u3048\u304a\n']

ダメだ...。