2012-05-27 112 views
1

您好我有,它返回其從一個MySQL生成分貝使用UTF-8編碼一個查詢集的csv文件的簡單視圖:Django的CSV輸出在Excel

def export_csv(request): 
    ... 
    response = HttpResponse(mimetype='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=search_results.csv' 
    writer = csv.writer(response, dialect=csv.excel)    
    for item in query_set: 
     writer.writerow(smart_str(item)) 
    return response 
    return render(request, 'search_results.html', context) 

這工作正常爲CSV文件,並且可以在沒有問題的文本編輯器,LibreOffice等中打開。

但是,我需要提供一個文件,可以在Windows中的MS Excel打開沒有錯誤。如果我在查詢集中有拉丁字符的字符串,例如'Española',那麼Excel中的輸出是'Española'。我試過blogpost,但沒有幫助。我也知道xlwt package,但我很好奇是否有辦法糾正輸出,使用我目前使用的CSV方法。

任何幫助非常感謝。

回答

0

看起來像所有版本的Excel都沒有統一的解決方案。

  1. 你最好的選擇migth是去與openpyxl,但這是相當複雜和requiers 單獨的下載Excel用戶這是不是最佳的操控性。

  2. 嘗試在文件的beginnign(0xEF,0xBB,0xBF)處添加字節順序標記。見microsoft-excel-mangles-diacritics-in-csv-files

還有另一個similar post

+0

我嘗試了幾個不同的編碼。 cp1250與其他人一樣會產生以下錯誤:''ascii'編解碼器無法解碼位置4中的字節0xc3:序號不在範圍內(128)' –

+0

您可以將結果(2行)呈現給變量並將其張貼在此處可以嘗試? –

+0

這是前兩行的一個簡化的'.values_list':'[(u'Abutilon depauperatum',u'Espa \ xf1ola'),'(u'Abutilon depauperatum',u'Espa \ xf1ola')]' –

0

你可能會給python-unicodecsv一個去。它取代了不太適合處理Unicode的python csv模塊。

  1. 把unicodecsv文件夾somehwere你可以導入或通過setup.py安裝
  2. 將其導入到你的視圖文件,如:

    import unicodecsv as csv