Django を使用して Unicode データ (ギリシャ文字) を含む CSV ファイルを作成し、MS Excel から直接開くようにしたいと考えています。他の場所で unicodecsv ライブラリについて読んだことがあり、それを使用することにしました。これが私の見解です。
def get_csv (リクエスト、ID): 応答 = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = '添付ファイル; ファイル名=csv.csv' ライター = unicodecsv.writer(応答、encoding='utf-16"') writer.writerow(['2 行目', 'A', 'B', 'C', '"テスト"', "ελληνικά"]) 応答を返す
ここで、utf-16 を除いて、utf-8、utf-8-sig、utf-8-le、utf-16-le など、ライターのエンコーディング パラメータのすべてを実際に試しました。Excel でファイルを開くたびに、ギリシャ文字があるべき場所にゴミが表示されていました。
Notepad++ は問題なくファイルを開くことができました。私は何を間違っていますか?
更新:jdの回答の後に試したことは次のとおりです。
csvをインポート 応答 = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = '添付ファイル; ファイル名=test.csv' response.write(u'\ufeff'.encode('utf8')) writer = csv.writer(response, delimiter=';' , dialect='excel') writer.writerow(['2 行目', 'A', 'B', 'C', '"テスト"', "ελληνικά"]) 応答を返す
まだ運がありません-ExcelでBOM(グラバージとして)も表示できるようになりました-unicodecsvと他のいくつかのオプションを使用してみましたが、もう一度何も機能しませんでした:(
更新2:ddaの提案の後にこれを試しました:
ライター = unicodecsv.writer(応答、区切り文字 =';'、方言 ='excel') writer.writerow(codecs.BOM_UTF16_LE) writer.writerow([ (u'ελληνικά').decode('utf8').encode('utf_16_le')])
まだ運がありません:(これが私が得るエラーです:
/csv/559 の UnicodeEncodeError 'ascii' コーデックは位置 0 ~ 7 の文字をエンコードできません: 序数が範囲外です (128)
更新 3: 気が狂いそうです。なんでこんなに難しいの??? 別の試みは次のとおりです。
response.write(codecs.BOM_UTF16_LE) writer = unicodecsv.writer(response, delimiter=';' , lineterminator='\n', dialect='excel', ) writer.writerow('ελληνικ') writer.writerow([ ('ελληνικά').decode('utf8').encode('utf_16_le')]) #A writer.writerow([ ('ελληνικά2').decode('utf8').encode('utf_16_le'), ('ελληνικά2').decode('utf8').encode('utf_16_le') ]) #B
そして、ここにExcelの内容があります:
㯎㮵㯎㮻㯎㮻㯎㮷㯎㮽㯎㮹㯎εληνικά딊묃묃뜃봃뤃먃갃㈃딻묃묃뜃봃뤃먃갃㈃
それで、#A という行でいくつかのギリシャ文字を取得しました。しかし、まったく同じ行 B では、ギリシャ文字が生成されませんでした $^#$#^$#$#^ @@%$#^#^$#$ Pls hlep !