2013-04-22 119 views
1

我有麻煩了解編碼是如何工作的:解碼Python字符串

爲什麼Python代碼字符串內進行編碼:

s = 'Au\xc3\x9fenformat\n' 
print s.encode('utf-8') 
>>>Außenformnat 

但是,如果我從一個文本文件中讀取這樣的字符串,我得到:

f = open('out.txt', 'r') 
data = f.read() 
print data.encode('utf-8') 
>>>Au\xc3\x9fenformat\n 

有什麼建議嗎?

+1

你的意思*解碼*?而你正在閱讀*文本文件*,而不是從這裏的sqlite數據庫。 – 2013-04-22 14:52:33

+0

是解碼(但在第一個例子中它給了我相同的結果!?)。我有文本文件和sqlite數據庫的問題,數據庫的例子更復雜,我認爲這是由於同樣的問題。我可以發佈它,如果它不是... – snowflake 2013-04-22 15:09:11

+2

在你做之前,請確保你已經閱讀[Python Unicode HOWTO](http://docs.python.org/2/howto/unicode.html),然後閱讀[這篇文章](http://joelonsoftware.com/articles/Unicode.html)和[this too too](http://nedbatchelder.com/text/unipain.html)。 'sqlite3'模塊處理Unicode很好,但是請驗證[模塊文檔](http://docs.python.org/2/library/sqlite3.html)以確保您沒有意外地錯誤配置內容。 – 2013-04-22 15:11:03

回答

3

試試這個,你應該看到文件的內容正確打印:

f = open('out.txt', 'r') 
data = f.read() 
print data.decode('string_escape') 

這是因爲在該文件中的TXT反斜線被轉義:

>>> open('out.txt').read() 
'Au\\xc3\\x9fenformat\\n\n' 
+0

啊,謝謝你的工作......我從來沒有來過這個...... – snowflake 2013-04-23 06:50:02

+0

是的,它非常棘手;) – 2013-04-23 20:37:27

0
>>> f = open('out.txt', 'r') 
>>> data= f.read() 
>>> print data.decode("string_escape") 
ußenformat