J'ai un peu de cerveau échec dans la compréhension de la lecture et de l'écriture d'un texte dans un fichier (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'
J'en Capit\xc3\xa1n
dans mon éditeur de texte favori, dans le fichier f2.
alors:
>>> 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'
Ce que je ne suis pas à comprendre ici? Clairement il y a quelques vital peu de magie (ou le bon sens) que je suis absent. Ce n'est qu'un type dans des fichiers texte pour obtenir les conversions.
Edit: Ce que je suis vraiment à défaut d'analyser ici, est ce que la pointe de l'UTF-8 est la représentation est, si vous ne pouvez pas obtenir Python à le reconnaître, quand on vient de l'extérieur. Peut-être que je devrais juste JSON vidage de la chaîne, et l'utiliser à la place, parce que cela a une asciiable représentation! Plus précisément, est-il une représentation ascii de cette unicode objet Python reconnaître et décoder, à partir d'un fichier? Si oui, comment puis-je l'obtenir?
>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'