質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4734閲覧

DjangoのPython2 と Python3でのCSV書き出しの挙動(shift-jis)

yuki1010

総合スコア43

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2016/12/24 09:09

以前Python2でCSVの書き出しをshift-jisに変換して行いました。

python

1# 中略 2response = HttpResponse(content_type='text/csv') 3filename = 'csv_test.csv' 4response['Content-Disposition'] = 'attachment; filename="%s"' % ( 5 filename) 6writer = csv.writer(response) 7csv_title = ['名前'.encode('shift-jis'), 'フリガナ'.encode('shift-jis')] 8csv_values = ['山田太郎'.encode('shift-jis'), 'ヤマダタロウ'.encode('shift-jis')] 9writer.writerow(csv_title) 10writer.writerow(csv_values) 11 12return response

これをPython3で同じコードで行ったところCSVの書き出しはできなのですが、CSVの中身のセル項目がバイト文字??みたいな文字列になってしまいました。
なにか良い解決方があればご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

python

1from io import StringIO 2import csv 3from django.http import HttpResponse 4 5 def get(self, request): 6 filename = 'test.csv' 7 response = HttpResponse(content_type='text/csv; charset=Shift-JIS') 8 response['Content-Disposition'] = 'attachment; filename="{}"'.format(filename) 9 sio = StringIO() 10 w = csv.writer(sio) 11 12 l = ['abc','def'] 13 w.writerow(l) 14 l = ['あいう','えおか'] 15 w.writerow(l) 16 17 response.write(sio.getvalue().encode('cp932')) 18 return response 19

一応これで機能はしているのですが、まずい点がありましたらご指摘よろしくお願いいたします。

投稿2016/12/26 15:24

yuki1010

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下でどうでしょうか?
csvモジュールではCSV操作だけをおこない、文字コード変換はファイルI/Oに任せる方法です。

Python

1import csv 2f = open('test.csv', 'w', encoding = 'shift-jis') 3 4# lineterminator未指定だと行末がCRCRLFになる。CRLFになるように。 5w = csv.writer(f, lineterminator='\n') 6 7l = ['abc','def'] 8w.writerow(l) 9l = ['あいう','えおか'] 10w.writerow(l) 11f.close()

投稿2016/12/24 20:09

編集2016/12/24 22:44
can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki1010

2016/12/26 15:20

ご回答ありがとうございます。HttpResponseを使用したかったので別の方法を使いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問