---
slug: "django-shift-jis-csv"
title: "Outputting Shift-JIS CSV with Django"
description: "How to return a Shift-JIS (CP932) CSV download response from Django on Python 3 — write to StringIO as Unicode first, then encode to cp932 in one shot."
url: "https://www.ytyng.com/en/blog/django-shift-jis-csv"
publish_date: "2016-06-20T08:35:12Z"
created: "2016-06-20T08:35:12Z"
updated: "2026-05-11T12:57:24.107Z"
categories: ["Django", "Python"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/ed02f7a071434541ab28cb58b25b9e80.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "en"
---

# Outputting Shift-JIS CSV with Django

<p>Python 3, Django 1.9</p>
<p>It might be easier and less troublesome to write in Unicode to StringIO first and then convert to CP932 all at once.</p>
<p></p>
<pre><span>class </span>CSVView(View):<br>    <span>def </span>get(<span>self</span>, <span>request</span>, <span>**kwargs</span>):<br><br><span>        </span>response = HttpResponse(<span>content_type</span>=<span>'text/csv; charset=Shift-JIS'</span>)<br>        response[<span>'Content-Disposition'</span>] = \<br>            <span>'attachment; filename=items.csv'<br></span><span>        </span>sio = io.StringIO()<br>        writer = csv.writer(sio)<br>        writer.writerow(<span>self</span>.header)<br>        <span>for </span>row <span>in </span><span>self</span>.get_rows():<br>            writer.writerow(row)<br>        response.write(sio.getvalue().encode(<span>'cp932'</span>))<br>        <span>return </span>response</pre>
