DjangoによるWebアプリで、CSV出力の機能を作ったのですが、文字化けしてしまい、
一度メモ帳で開いてutf-8に直すのが手間だったのでShift-Jisに変換して出力したのですが、
一部の環境依存文字がShift-Jisに変換できず困っています。
unicodedata.normalizeを使用することである程度の変換は出来たのですが、下記のような文字は変換することが出来ませんでした。
'嚙', '➡', '❕', '髙'
from django.http import HttpResponse import csv import unicodedata response = HttpResponse(content_type='text/csv; charset=Shift-Jis') response['Content-Disposition'] = 'attachment; filename=sample.csv;' writer = csv.writer(response) writer.writerow([ unicodedata.normalize('NFKC', text) ])
CSVをUTF-8で保存する、環境依存文字をShift-Jisに変換する。
どちらのやり方でも良いのですが、良い方法があれば教えていただきたいです。
Python == 3.7
Django == 2.1
###追記
Webアプリにアクセスし、csvをダウンロードしたら、文字化けをしてしまいました。
原因は、DBの文字コードがUTF-8なのに文字コードをそのままでcsv自体をShift-Jisで保存されているからです。
そのため、中身を確認するために該当のcsvをメモ帳で開き、utf-8で保存することで、Excel上で中身を確認することが出来ました。
ですが、毎回このようなことをするわけにはいかないので、
- データの文字コードはUTF-8のままCSVをUTF-8として保存する
- データの文字コードをShift-Jisに変換し、CSVは現状のままShift-Jisで保存する
上記のどちらかの方法をとる必要があると考えました。
CSVをUTF-8として保存する方法が分からなかったので、
2つ目の方法を選択し、
上に記載したコードのようにunicodedata.normalizeで正規化した後に文字コードをShit-Jisに変換して保存しようとしたのですが、
一部の文字のShift-Jisへの変換に失敗してエラーとなってしましました。
