2014-01-17 50 views
0

採取以下Python代碼,從而產生含有一個Unicode字符串的文本文件:Unicode文本在MS Word和Python

def writefile(): 
    out = u'x \u2208 \u22C3A \u2192 \u2203y(x \u2208 y \u2208 A)' 
    fout = open("output.txt",'w') 
    fout.write(out.encode('UTF-8')) 
    fout.close() 

# The string is: x ∈ ⋃A → ∃y(x ∈ y ∈ A) 

如果我使用重量輕的文本編輯器,如納米(打開這個文件在終端中),TextWrangler或TextEdit,一切看起來都很好,但如果我嘗試通過MS Word打開文件(Word for Mac 2011,v14.3.9),則所有的Unicode字符都會出現亂碼。當打開文件時,Word會拋出一個詢問「將文件轉換爲:」的對話框,但每種可用的轉換方法似乎都會產生亂碼。例如:

x ∈ ⋃A → ∃y(x ∈ y ∈ A) (opening as either UTF-8 or Mac OS (Default)) 
x ∈ ⋃A → ∃y(x ∈ y ∈ A) (opening as MS-DOS Text) 

然而,如果我打開該文件在例如TextWrangler,然後將該字符串複製到剪貼板,然後將其粘貼到MS Word中,它會正確顯示該字符串。所以有兩個問題:

1.)什麼解釋了這種行爲?即Word沒有正確顯示文件的事實,以及在Word中打開文件與從另一個程序將其內容粘貼到Word中的區別。

2.)我該如何編寫一個腳本(例如python),它接受上述utf-8文件並將其轉換爲單詞可以讀取/正確顯示的內容?

回答

1
  1. 這是Microsoft Word的問題。寫入的文件是正確的UTF-8,但Word正在讀取它,就好像它使用Mac Roman編碼一樣。請注意,當您告訴Word使用「Unicode 6.1 UTF-8」導入時,預覽不會更改。

  2. 試着寫出它爲UTF-16。我已經檢查過MS Word可以正確讀取一個big-endian的UTF-16文件。我認爲只要將UTF-8更改爲UTF-16應該可以工作,但對於投注結果,您可能需要試驗UTF-15BE和UTF-16LE,並且還可以在開始時寫出BOM(字節順序標記)文件。

+1

謝謝,在Python腳本中使用'fout.write(out.encode('UTF-16'))'工作。 (Word默認打開output.txt文件,如Unicode 6.0(Little-Endian),正確顯示)。但哇,這是一個惱人的錯誤。 –