#11624 closed (fixed)
`render_to_kmz` can't handle non-ascii data
| Reported by: | jbronn | Owned by: | jbronn | 
|---|---|---|---|
| Component: | GIS | Version: | dev | 
| Severity: | Keywords: | gis kmz render_to_kmz | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
So, say you are using the world application from the GeoDjango tutorial (source here), and you set up the following view:
from django.contrib.gis.shortcuts import render_to_kmz
from world.models import WorldBorders
def kmz(request):
    # getting only the Åland Islands, non-ascii character in the name
    qs = WorldBorders.objects.filter(id=142).kml()
    return render_to_kmz('gis/kml/placemarks.kml',
                         { 'places' : qs})
When trying to visit this view, one gets a UnicodeEncodeError instead of a KMZ file.  
Because ZipFile objects only accept byte strings, the unicode string from render_to_kml needs to be encoded properly.  I assume this should be for what the users has in settings.DEFAULT_CHARSET, and the attached patch does that -- but I want to have additional eyes look this over to make sure I'm doing it right. 
Attachments (1)
Change History (6)
by , 16 years ago
| Attachment: | render_to_kmz_encoding_fix.diff added | 
|---|
comment:1 by , 16 years ago
| Triage Stage: | Unreviewed → Accepted | 
|---|
comment:2 by , 16 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | new → closed | 
comment:3 by , 16 years ago
comment:4 by , 15 years ago
Thanks for doing this. Just patched it on 1.1 and found the fix is already in the trunk. You guys rock!
Encode the KML as a bytestring using
DEFAULT_CHARSET.