0

この投稿をフォローしています

https://stackoverflow.com/a/9016545

Pythonでそれを行うにはどうすればよいか知りたいです。そこに BOM データを挿入する方法がわかりません

これは私の現在のコードです

    response = HttpResponse(content_type='text/csv')
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment; filename="results.csv"'
    writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf-8")

utf -16 に変換したい。BOm データはこれですが、挿入方法がわかりません ここからhttps://stackoverflow.com/a/4440143

echo "\xEF\xBB\xBF"; // UTF-8 BOM

しかし、私はpythonとutf-16のためにそれが欲しい

そのcsvをメモ帳で開いてみて、最初に挿入\xef\xbb\xbすると、Excelが正しく表示されました。ただし、最初の列の前にも表示されます。

ユーザーがそれを好まないので、どうすればそれを非表示にできますか

4

2 に答える 2

2

これらの行のいずれかで、エンコーディング用の正しい BOM が書き込まれます。BOM が正しい場合、Excel には表示されません。

writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf-8-sig")

また:

writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf16")

utf8、BOM を書き込まutf-16leないでutf-16be ください。

于 2013-06-26T04:32:11.693 に答える
0

間違った BOM を挿入していると思います。https://en.wikipedia.org/wiki/Byte_order_mark#UTF-16から、FF FE または FE FF を使用する必要があることが示唆されています (エンディアンが大きいか小さいかによって異なります)。

python ドキュメント ( http://docs.python.org/2/howto/unicode.html ) では、utf-16 のエンコーディング設定があることが示唆されています。さらに、「リトルエンディアンおよびビッグエンディアンのエンコーディング用の 'utf-16-le' や 'utf-16-be' など、これらのエンコーディングのバリエーションがあります」。おそらく、これらにより、書き込み中に BOM が自動的に挿入されるようになります。

于 2013-06-26T04:18:47.773 に答える