2017-05-10 35 views
4

我知道,這個問題已經被問及百萬次了。但我仍然堅持下去。我使用Python 2和不能改變到Python 3python將德語umlaute寫入文件

問題是這樣的:

>>> 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'}

我是什麼失蹤,我仍然在編碼解碼東西noob:/

回答

2

我不確定你爲什麼要這種格式,因爲它不適合讀入任何其他應用程序,但沒關係。

問題是,要將一個字典寫入一個文件,它需要轉換爲一個字符串 - 爲此,Python在其所有元素上調用repr

如果您手動創建的輸出作爲一個字符串,一切都很好:

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

我想創建SQL編程文件將被導入到MySQL數據庫..讓我試試你的 – doniyor

+0

版本,但如果你是編程讀它,爲什麼關心逃逸,因爲閱讀應用將是能夠處理它嗎?爲什麼不使用JSON等適當的交換格式? –

+0

是的,json更有意義 – doniyor

1

最簡單的辦法是切換到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')))