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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1877閲覧

CSV出力時に500errorが出る

setuna0531

総合スコア128

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/06 03:06

編集2020/11/10 07:46

#現状
開発環境にて、CSV出力を行う機能を作詞して動作確認も終え、
実際にデプロイ済のアプリに追加をしました。
追加後、サーバーの再起動も行い、CSV出力を行うと
500errorが帰ってきてしまい困っています。

#ソース

views.py from .models import Support import csv def download(request): # レスポンスの設定 response = HttpResponse(content_type='text/csv; charset=Shift-JIS') filename = 'data.csv' #csv名 response['Content-Disposition'] = 'attachment; filename={}'.format(filename) writer = csv.writer(response) # ヘッダー出力 header = ['日付','タイトル','内容'] writer.writerow(header) # データ出力 for data in Support.objects.all(): writer.writerow([data.date, data.title, data.contents]) return response
urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('download/', views.download, name='download'), ]
templates <a href='{% url "download" %}' class="btn btn-secondary">データのダウンロード</a>

#最後に
他のアプリもサーバーで動いているため、「return response」がうまく動作していないのか?
という疑問はあります。
提案や、改善案などがございましたらご教授ください。

#追記
デバックモードでエラーを見ることが出来ました。
エラー内容は下記のとおりです。

UnicodeEncodeError at /support/download/ 'shift_jis' codec can't encode character '\uff0d' in position 46: illegal multibyte sequence

UTF-8で試しましたところ、ダウンロードは出来るようになりましたが文字化けします。
文字化けを回避するにはShift-JIS以外で方法はあるのでしょうか。

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

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

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

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

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

plasticgrammer

2020/11/06 04:13

念のための確認ですが、csv、Support といったクラスは問題なく使用できる状態(importされている)なのでしょうか。
setuna0531

2020/11/06 05:22

views.pyの先頭に from .models import Support import csv と明記しております。 念のため投稿のソースも直してきます。
setuna0531

2020/11/06 05:30

can110様 デバックモードで出来れば私も解決できるのですが、 実際に動いてしまっているアプリに追加する形になるので、デバックをTrueにできない状況です。 様子を見ながらデバックモードにできそうなタイミングで一度エラーを出してみようと思います。 お待ちください。
setuna0531

2020/11/10 07:47

can110様 デバック出来ました。 質問内容に追記させていただきましたのでご確認よろしくお願い致します。
guest

回答3

0

ベストアンサー

charset=cp932
はどうでしょうか?

投稿2020/11/10 08:17

shinTrue5

総合スコア51

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

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

setuna0531

2020/11/10 08:33

ご回答ありがとうございます。 調べているときにcp932というのは目にしていましたが、 回答通り、charset=cp932にしたところ文字化けが解消しました・・・ 以外にもあっさり出来てしまって驚いています。 ご回答ありがとうございました!助かりました!
shinTrue5

2020/11/10 08:42

良かったです。 この回答が更に今後誰かのお役に立てれば幸いです。
guest

0

Djangoは使っていないので多分に推測を含む回答となります。
出力文字列にShift-JISに変換できない文字「」が含まれているため提示エラーが発生しています。
修正方針としては、以下の2案が考えらえます。

A.UTF-8でCSV出力する
B.Shift-JISに変換できない文字は無視する

A案をとった場合、(UTF-8で表現できる文字であれば)欠損なくデータをCSVに変換できますが、UTF-8なCSVが開けるかどうかはダウンロード側の問題、責任となります。

ダウンロード側がどうしてもUTF-8なCSVを開けない場合はB案をとることになります。
その場合はErrror in outputting CSV with Django?Mohammed Yasinさんの回答が参考になるかと思います。
すなわち、以下のような変換関数をかます方法をとります。

def ignore(s): return s.encode('shift-jis','ignore').decode('shift-jis') : writer.writerow([data.date, ignore(data.title), ignore(data.contents)])

投稿2020/11/10 08:14

編集2020/11/10 08:15
can110

総合スコア38341

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

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

setuna0531

2020/11/10 08:29

ご回答ありがとうございます。 Aに関しては、ダウンロードできましたが、ダウンロードしたものが文字化けしてしまいました。 Bについてはまだやれていないのでやってみたいと思います。 ありがとうございました!
guest

0

投稿2020/11/10 07:49

plasticgrammer

総合スコア629

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

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

setuna0531

2020/11/10 08:30

ご回答ありがとうございます。 参考までに読まさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問