我知道,这个问题已被问过百万次。但我仍然坚持下去。我使用的是python 2,无法更改为python 3.
问题是:
>>> w = u"ümlaut"
>>> w
>>> u'\xfcmlaut'
>>> print w
ümlaut
>>> dic = {'key': w}
>>> dic
{'key': u'\xfcmlaut'}
>>> f = io.open('testtt.sql', mode='a', encoding='UTF8')
>>> f.write(u'%s' % dic)
然后文件有:
{'key': u'\xfcmlaut'}
我需要{'key': 'ümlaut'}
或{'key': u'ümlaut'}
我错过了什么,我仍然在编码解码的东西:/
答案 0 :(得分:2)
我不确定你为什么特别喜欢这种格式,因为它无法读入任何其他应用程序,但没关系。
问题是要将字典写入文件,需要将其转换为字符串 - 为此,Python会在其所有元素上调用repr
。
如果您手动创建输出作为字符串,一切都很好:
d = "{'key': '%s'}" % w
with io.open('testtt.sql', mode='a', encoding='UTF8') as f:
f.write(d)
答案 1 :(得分:2)
最简单的解决方案是切换到python3,但由于你不能这样做,在尝试将字典保存到文件之前先将字典转换为json。
import io
import json
import sys
reload(sys)
sys.setdefaultencoding('utf8')
w = u"ümlaut"
dic = {'key': w}
f = io.open('testtt.sql', mode='a', encoding='utf8')
f.write(unicode(json.dumps(dic, ensure_ascii=False).encode('utf8')))