2013-02-27 109 views
1

我試圖將非ascii字符的mongodb導出爲csv格式。 現在,我涉足金字塔和金字塔。反應。python unicode csv使用金字塔導出

from pyramid.response import Response 
from mycart.Member import Member 

@view_config(context="mycart:resources.Member", name='', request_method="POST", permission = 'admin') 
def member_export(context, request): 
    filename = 'member-'+time.strftime("%Y%m%d%H%M%S")+".csv" 
    download_path = os.getcwd() + '/MyCart/mycart/static/downloads/'+filename 

    member = Members(request) 

    my_list = [['First Name,Last Name']] 

    record = member.get_all_member()    
    for r in record: 

     mystr = [ r['fname'], r['lname']] 

     my_list.append(mystr) 

    with open(download_path, 'wb') as f: 
     fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
     for l in my_list: 
      print(l) 
      fileWriter.writerow(l) 

    size = os.path.getsize(download_path) 
    response = Response(content_type='application/force-download', content_disposition='attachment; filename=' + filename) 
    response.app_iter = open(download_path , 'rb') 
    response.content_length = size 

    return response 

在MongoDB中,第一個名字是顯示,當我使用的打印,它也正顯示出。然而,當我用Excel打開它時,它顯示隨機的東西 - CH 2 ...

然而,當我試着在shell中查看

$ more member-20130227141550.csv 

它成功地正確顯示非ASCII字符。

我應該如何解決這個問題?

+0

可能是你可以嘗試在這[問題]中提到的東西(http://stackoverflow.com/questions/4182603/python-how-to-convert-a-string-to-utf-8) – 2013-02-27 06:48:37

+0

或者你也可以使用unicodecsv來完成這項工作,[unicodecsv](https://github.com/jdunck/python-unicodecsv),因爲python的內部csv模塊不支持unicode。 – 2013-02-27 07:01:07

+0

Excel根據計算機的當前語言設置解釋CSV文件。它不能識別UTF-8,而是會愉快地將數據解釋爲不同的編碼。解決方案:將您的CSV編碼定位到任何將要使用它的人。 – 2013-02-27 14:53:42

回答

1

我不是Windows的傢伙,所以我不確定問題可能出在你的代碼上,或者用excel只是不好處理非ascii字符。但我注意到你正在用python csv模塊編寫你的文件,它是notorious for headaches with unicode

其他用戶報告成功使用unicodecsv作爲csv模塊的替代品。也許你可以嘗試在這個模塊中作爲一個csv作家,看看你的問題是否神奇地消失。

+0

是unicodecsv python3.2兼容嗎? – Gino 2013-02-27 08:22:45