ファイルへのテキストの読み取りと書き込み(Python 2.4)を理解するときに、いくつかの脳の障害があります。
# The string, which has an a-acute in it.
ss = u'Capit\xe1n'
ss8 = ss.encode('utf8')
repr(ss), repr(ss8)
( "u'Capit \ xe1n '"、 "' Capit \ xc3 \ xa1n '")
print ss, ss8
print >> open('f1','w'), ss8
>>> file('f1').read()
'Capit\xc3\xa1n\n'
それでCapit\xc3\xa1n
、ファイルf2でお気に入りのエディターに入力します。
次に:
>>> open('f1').read()
'Capit\xc3\xa1n\n'
>>> open('f2').read()
'Capit\\xc3\\xa1n\n'
>>> open('f1').read().decode('utf8')
u'Capit\xe1n\n'
>>> open('f2').read().decode('utf8')
u'Capit\\xc3\\xa1n\n'
ここで何を理解していませんか?明らかに、私が見逃しているいくつかの重要な魔法(または良識)があります。適切な変換を行うために、テキストファイルに何を入力しますか?
ここで本当に失敗しているのは、外部から来たときに実際にPythonに認識させることができない場合のUTF-8表現のポイントです。たぶん私は文字列をJSONダンプして、代わりにそれを使用するべきです。さらに言えば、このUnicodeオブジェクトのASCII表現は、ファイルから入ってくるときにPythonが認識してデコードするものですか?もしそうなら、どうすれば入手できますか?
>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'