diff --git a/docs/howto/outputting-csv.txt b/docs/howto/outputting-csv.txt index 169114ff95..46e111d8af 100644 --- a/docs/howto/outputting-csv.txt +++ b/docs/howto/outputting-csv.txt @@ -56,12 +56,35 @@ mention: about escaping strings with quotes or commas in them. Just pass ``writerow()`` your raw strings, and it'll do the right thing. +Handling Unicode +~~~~~~~~~~~~~~~~ + +Python's ``csv`` module does not support Unicode input. Since Django uses +Unicode internally this means strings read from sources such as +:class:`~django.http.HttpRequest` are potentially problematic. There are a few +options for handling this: + + * Manually encode all Unicode objects to a compatible encoding. + + * Use the ``UnicodeWriter`` class provided in the `csv module's examples + section`_. + + * Use the `python-unicodecsv module`_, which aims to be a drop-in + replacement for ``csv`` that gracefully handles Unicode. + +For more information, see the Python `CSV File Reading and Writing`_ +documentation. + +.. _`csv module's examples section`: http://docs.python.org/library/csv.html#examples +.. _`python-unicodecsv module`: https://github.com/jdunck/python-unicodecsv +.. _`CSV File Reading and Writing`: http://docs.python.org/library/csv.html + Using the template system ========================= Alternatively, you can use the :doc:`Django template system ` -to generate CSV. This is lower-level than using the convenient CSV, but the -solution is presented here for completeness. +to generate CSV. This is lower-level than using the convenient Python ``csv`` +module, but the solution is presented here for completeness. The idea here is to pass a list of items to your template, and have the template output the commas in a :ttag:`for` loop.