2

オンザフライでいくつかの csv ファイルを生成し、ダウンロードのためにユーザーに送信する関数を作成しました。

コードは以下のとおりです。

@app.route('/survey/<survey_id>/report')
def survey_downloadreport(survey_id):  
    survey, bsonobj = survey_get(survey_id)
    resps = response_get_multi(survey_id)

    fields = ["_id", "sid", "date", "user_ip"]
    fields.extend(survey.formfields)    

    csvf = StringIO.StringIO()
    wr = csv.DictWriter(csvf, fields, encoding = 'cp949')
    wr.writerow(dict(zip(fields, fields)))
    for resp in resps :
        wr.writerow(resp)

    csvf.seek(0)

    now = datetime.datetime.now()
    report_name = survey.name + "(" + \
                  now.strftime("%Y-%m-%d-%H:%M:%S") +\
                  ")" + ".csv"

    report_name = report_name.encode("utf-8")



    return send_file(csvf,
                 as_attachment = True,
                 attachment_filename = report_name)

ご覧のとおり、ファイル名は Unicode から文字列に変換され、utf-8 に変換されます (正確には、これらは韓国文字です)。

問題は、IE でページを表示するとファイル名が完全に壊れてしまうことです (chrome では問題ありません)。

さまざまなブラウザーの解析ルールに一致するようにヘッダーを編集する必要があるようですが、フラスコでこれを行う方法がわかりません。

4

2 に答える 2

3

追加してみてください

mimetype = 'text/csv; charset=x-EBCDIC-KoreanAndKoreanExtended'

send_fileに。

于 2013-02-01T15:54:48.250 に答える