python将德语umlaute写入文件

python将德语umlaute写入文件,python,Python,我知道,这个问题已经被问过无数次了。但我仍然坚持着。我正在使用python 2,无法更改为python 3 问题是: >>> w = u"ümlaut" >>> w >>> u'\xfcmlaut' >>> print w ümlaut >>> dic = {'key': w} >>> dic {'key': u'\xfcmlaut'} >>> f = io.open('

我知道,这个问题已经被问过无数次了。但我仍然坚持着。我正在使用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':'ulmlaut'}
{'key':u'ulmlaut'}


我缺少的是什么,我仍然不擅长编码和解码:/

我不确定您为什么特别想要这种格式,因为它无法读入任何其他应用程序,但没关系

问题在于,要将字典写入文件,需要将其转换为字符串——为此,Python对其所有元素调用
repr

如果将输出手动创建为字符串,则一切正常:

d = "{'key': '%s'}" % w
with io.open('testtt.sql', mode='a', encoding='UTF8') as f:
    f.write(d)

最简单的解决方案是切换到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')))

我正在尝试以编程方式创建sql文件,该文件将导入mysql数据库。。让我试试你的版本,但是如果你是以编程方式阅读它,为什么要关心转义呢,因为阅读应用程序将能够处理它?为什么不使用像JSON这样合适的交换格式呢?嗯,现在我意识到,我无法手动构建dicts:/。不可能动态构建,但仍然保留umlauts?