2012-07-19 44 views
4

試圖寫一行在Python 2.7的文本文件,並有以下代碼:Python 2.7:設置I/O編碼,?

# -*- coding: utf-8 -*- 
... 
f = open(os.path.join(os.path.dirname(__file__), 'output.txt'), 'w') 
f.write('Smith’s BaseBall Cap') // Note the strangely shaped apostrophe 

然而,在output.txt中,我得到Smith‚Äôs BaseBall Cap,來代替。不知道如何糾正這種編碼問題?有這種問題的任何protips?

+0

您使用的是哪個Python版本? – BrenBarn 2012-07-19 00:47:46

+0

哦拍,2.7!感謝您的支持 – zhuyxn 2012-07-19 00:49:00

+0

您是否在OS X上? – 2012-07-19 00:50:34

回答

11

你已經聲明你的文件是用UTF-8編碼的,所以你的字節串文字是用UTF-8編碼的。捲曲撇號是U+2019。在UTF-8中,它被編碼爲三個字節\ xE2 \ x80 \ x99。這三個字節被寫入您的輸出文件。然後,當您檢查輸出文件時,它將被解釋爲UTF-8以外的內容,而您會看到三個不正確的字符。

Mac OS Roman中,這三個字節顯示爲‚Äô

你的文件是一個正確的UTF-8文件,但你正在錯誤地查看它。

+0

這是真的,但如果他然後使用正常的文件操作,它應該按原樣寫入,並保留在輸出文件中的UTF-8字節中 – BrenBarn 2012-07-19 00:58:14

+1

@BrenBarn:假設輸出文件顯示爲UTF-8,不是,它是Mac OS Roman 。 – 2012-07-19 01:01:26

+0

噢,看來我用來查看輸出(TextEdit)的軟件似乎有問題,如果我在命令提示符下輸出output.txt,它的效果很好 – zhuyxn 2012-07-19 01:06:32

1

有幾種可能性,但首先要檢查的是輸出文件實際上包含您認爲它的作用。你確定你沒有查看錯誤編碼的文件嗎?一些編輯可以選擇你正在查看文件的編碼。編輯器需要知道文件的編碼,如果它將文件解釋爲使用UTF-8以外的其他編碼,它甚至會顯示錯誤的內容儘管該文件的內容是正確的。

當我運行你的代碼(在Python 2.6上)時,我在文件中得到了正確的輸出。另一個嘗試:使用codecs模塊打開UTF-8文件的文件:f = codecs.open("file.txt", "w", "utf-8"). Then declare the string as a unicode string with u「'Smith's BaseBall Cap'」`。

+2

OS X使用MacRoman作爲其默認編碼。 '>>> print u'''。encode('utf-8')。decode('macroman')' ',' – 2012-07-19 01:00:25

+0

當然,但是問題是什麼編碼正在被用於讀取的特定程序文件。 – BrenBarn 2012-07-19 01:03:09

+0

它是OS X.因此該程序是TextEdit,編碼是MacRoman。 – 2012-07-19 01:05:32