Ich habe einige Gehirn Fehler im Verständnis Lesen und Schreiben von Text in eine Datei (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'
Ich gebe also ein Capit\xc3\xa1n
in meinem Lieblingseditor, in der Datei f2.
Dann:
>>> 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'
Was verstehe ich hier nicht? Offensichtlich gibt es einen wichtigen Teil der Magie (oder des gesunden Menschenverstands), den ich übersehe. Was muss man in Textdateien eingeben, damit sie richtig konvertiert werden?
Was ich hier wirklich nicht verstehe, ist, was der Sinn der UTF-8-Darstellung ist, wenn man Python nicht dazu bringen kann, sie zu erkennen, wenn sie von außen kommt. Vielleicht sollte ich einfach JSON dump die Zeichenfolge, und verwenden, dass stattdessen, da das eine asciiable Darstellung hat! Genauer gesagt, gibt es eine ASCII-Darstellung dieses Unicode-Objekts, die Python erkennt und dekodiert, wenn es aus einer Datei kommt? Wenn ja, wie bekomme ich sie?
>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'