diff options
| author | Gabriel Hurley <gabehr@gmail.com> | 2010-11-29 06:25:25 +0000 |
|---|---|---|
| committer | Gabriel Hurley <gabehr@gmail.com> | 2010-11-29 06:25:25 +0000 |
| commit | 3d07bb71c6ffc225e6d3a32975f6855b2561e85a (patch) | |
| tree | fb95d059d54e87fc5d593f2331965af163697a7e | |
| parent | 3c951d94b66433244b31c6ab49e53f1b608c0b6e (diff) | |
[1.2.X] Fixed #14777 -- Added docs on working around the Python CSV module's lack of Unicode support. Thanks to adamv for the report and draft patch.
Backport of [14749] from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14750 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | docs/howto/outputting-csv.txt | 27 |
1 files changed, 25 insertions, 2 deletions
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 </topics/templates>` -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. |
