我在理解读写文件(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'
所以我在我最喜欢的编辑器f2文件中输入了Capit\xc3\xa1n
.
然后:
>>> 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表示,那么UTF-8表示的意义是什么.也许我应该只使用JSON转储字符串,而不是使用它,因为它有一个可asciiable表示!更重要的是,当从文件传入时,Python是否可以识别和解码此Unicode对象的ASCII表示?如果是这样的话,我怎么才能拿到呢?
>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'