2010-07-06 69 views
0

Python的unicode的問題具有生成從數據庫視圖CSV響應下面的Django視圖代碼:在Windows XP

def _get_csv_stats(request, **filterargs): 
    result = GlobalStats.objects.select_related().filter(**filterargs).values_list('user__username', 
                        'user__first_name','user__last_name', 
                        'center__name', 'action_name', 
                        'action_date').annotate(num = Count('id')).order_by("action_date") 
    response = HttpResponse(mimetype = 'text/csv') 
    response.write(codecs.BOM_UTF8) 
    response['Content-Disposition'] = 'attachment; filename=statistcs.csv' 
    writer = UnicodeWriter(response) 
    for value in result: 
     writer.writerow([unicode(v) for v in value]) 
    return response 

某些列包含UTF8文本。當我下載文件並使用Linux或Mac OS X打開它時,我可以正確地看到文本。但使用Windows XP奇怪字符下載和打開文件出現在非ASCII文本的位置。使用Linux上的Open Office將文件從csv轉換爲xls,並在windows xp上打開該文件將產生一個可讀的文件(沒有奇怪的字符)。

我看不到我在這裏錯過了什麼,因爲我不喜歡win XP。有沒有人遇到類似的東西?

我使用的UnicodeWriter類在底部被描述爲here

+0

您是否在每個操作系統中嘗試了多個瀏覽器?例如,Opera,Chrome和Firefox都運行在它們之中 - 瀏覽器特定的「怪異字符」問題是什麼?如果您下載CSV並直接在Excel或OOO中打開它,這是否仍然很奇怪 - 或者在瀏覽器中看起來很奇怪......? – 2010-07-06 15:26:04

+0

@Alex它並不重要,我用它來打開它。問題是隻有win xp將文件視爲ASCII文本而不是unicode。當我用記事本打開它並使用保存將它保存爲unicode編碼的文本文件時,一切看起來都很好。所以編寫一個字節順序標記沒有任何幫助。我假設我必須指示瀏覽器在響應頭中是unicode編碼的文件。 – Vasil 2010-07-06 16:48:14

回答

0

文本是否正確顯示取決於正在繪製的字體是否支持所有Unicode字符。這對你的Django來說不是問題。

0

第一:我不知道django,所以也許這很遙遠。

檢查您的編寫者是否實際輸出UTF-8,如果您在文件中寫入UTF-8 BOM。 Unicode和UTF-8不一樣。另外,afaikt,Windows記事本是否能夠理解UTF-8的BOM,因此您得到「奇怪」的字符可能意味着兩件事:

a)文件的其餘部分不是真正的UTF-8編碼,請嘗試v.encode('utf-8')

b)您嘗試顯示的字符不受字體支持