BOM(byte order mark)
- ファイルの先頭3バイトが ‘EF BB BF’ の UTF-8
rest_framework_csv
- rendererで、 コンテキストの
encodingを判定している encodingにutf-8-sigを 指定する
viewset: get_renderer_context をオーバーライドする
def get_renderer_context(self):
"""(override)"""
context = super().get_renderer_context()
# ここで、以下の条件の時に utf-8-sigにセット
# 1) text/csv を求めている
# 2) utf-8 でエンコードが指定されている(デフォルト)
if self.request.META.get('HTTP_ACCEPT', '').startswith('text/csv'):
context['encoding'] = 'utf-8-sig'
return context