2014-11-02 76 views
1

我有一個包含大量文本的大表單。例如,它可能包含帶引號的單詞,如"Программа"。當我將它提交給服務器並嘗試將提交的內容寫入文件時,出現錯誤。如果我用拉丁字母替換所有西裏爾字母,那麼一切正常。問題顯然在服務器端。我想,如果我新的如何處理像"Текст на кириллице"這樣的字符串,我可以解決這個問題。如何在Python/Django中將西裏爾字母寫入文件

+0

什麼錯誤,你得到什麼呢? – 2014-11-02 14:01:03

+0

服務器應該返回json'{success:true}',並且客戶端用一個警告'Saved!'來響應。拉丁字母的作品,但與西裏爾字母我看不到來自服務器的迴應。 – Jacobian 2014-11-02 14:07:14

回答

3

當您寫入文件unicode字符串時,必須先對其進行編碼。

讓我們嘗試以下操作:

# -*- coding: utf-8 -*- 
text = u"Текст на кириллице" 

with open('outfile.txt', 'w') as fw: 
    fw.write(text) 

該代碼將引發異常

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 

所以,僅僅編碼的文本。其中最流行的編碼爲「UTF8」:

# -*- coding: utf-8 -*- 
text = u"Текст на кириллице" 

with open('outfile.txt', 'w') as fw: 
    fw.write(text.encode('utf8')) 

你必須記住的編碼,這是用來編碼的文本,以便在將來讀它。 從文件中讀取的文本,用書面方式中使用相同的編碼解碼它:

with open('outfile.txt') as f: 
    text = f.read() 

print text.decode('utf8') 
+0

如果我將文本作爲變量傳遞,我應該怎麼做?我的意思是,這個「text = u變量」是正確的嗎?我不知道正確的語法 – Jacobian 2014-11-02 14:11:50

+0

在我的例子'text' - 是一個變量,'u「Текстнакириллице」'是一個變量值 – stalk 2014-11-02 14:13:03

+0

我的意思是,我想在右側有一個變量。想象一下,我有一個變量,它包含這個文本'Текстнакириллице'。我應該如何將它轉換爲utf?只是你變了嗎?或者variable.encode(utf8)? – Jacobian 2014-11-02 14:16:56