2016-08-17 76 views
-4

文件導出效果很好,但是我在編碼數據時遇到了問題。 我犯了什麼錯誤?使用CSV的Django編碼問題

我的代碼是

for user in users: 
    result = user[0].encode('utf-8') 
    for x in filter(lambda q: q is not None, user): 
     result += ', ' 
     if type(x) in (str, unicode): 
      result += x.encode('utf-8') 
     else: 
      result += str(x) 
     print type(result), result 
    writer.writerow(result) 

return response 
+1

究竟什麼是你的問題使用它呢?你有錯誤信息嗎? – user2393256

+0

定義「我有問題。」你有錯誤/追溯?展示下。 CSV在Python 2庫中不能很好地處理Unicode,所以很多人使用'unicodecsv'。你在使用Python 2或3嗎?沒有足夠的信息來幫助你...... – Dan

+0

不,我在導出的文件中遇到問題。我使用python 2.7 現在,在文件中的數據看起來像 Имя\tФамилия\tКомментарий\tДатаконтракта \t \t \t \t \t \t – tonyjasta

回答

0

的.encode方法被施加到一個Unicode字符串做出字節串;如果您的CSV數據不是utf-8,而是使用拉丁文1編碼,那麼您需要「轉碼」。類似這樣的:

line.decode('latin-1').encode('utf-8') 

如果你知道你的CSV編碼,那麼用任何你輸入的數據編碼替換拉丁-1。

另外,如果你不知道的CSV文件的編碼是什麼,那麼你可能要考慮使用chardet,你可以瞭解如何在readthedocs

+0

我用 'writer.writerow ([x.encode('utf-8')for x in filter(lambda q:q is not None,user)])' 但是,此方法不適用於所有值 – tonyjasta