diff options
| author | Tom Christie | 2013-05-20 21:00:56 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-05-20 21:00:56 +0100 | 
| commit | f19e0d544fdcd318c2bde2057d91777beda78915 (patch) | |
| tree | 16b48c2cca2fe887b7fd16247ebd6c6b9e172d70 /rest_framework/renderers.py | |
| parent | 6fcffcc9c65d789b02c07372e3f4dd2f9ef5eba3 (diff) | |
| download | django-rest-framework-f19e0d544fdcd318c2bde2057d91777beda78915.tar.bz2 | |
Fix charset issues
Diffstat (limited to 'rest_framework/renderers.py')
| -rw-r--r-- | rest_framework/renderers.py | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index c67c8ed6..fd868346 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -9,7 +9,6 @@ REST framework also provides an HTML renderer the renders the browsable API.  from __future__ import unicode_literals  import copy -import string  import json  from django import forms  from django.http.multipartparser import parse_header @@ -36,7 +35,7 @@ class BaseRenderer(object):      media_type = None      format = None -    charset = None +    charset = 'utf-8'      def render(self, data, accepted_media_type=None, renderer_context=None):          raise NotImplemented('Renderer class requires .render() to be implemented') @@ -51,6 +50,7 @@ class JSONRenderer(BaseRenderer):      format = 'json'      encoder_class = encoders.JSONEncoder      ensure_ascii = True +    charset = 'iso-8859-1'      def render(self, data, accepted_media_type=None, renderer_context=None):          """ @@ -74,7 +74,12 @@ class JSONRenderer(BaseRenderer):              except (ValueError, TypeError):                  indent = None -        return json.dumps(data, cls=self.encoder_class, indent=indent, ensure_ascii=self.ensure_ascii) +        ret = json.dumps(data, cls=self.encoder_class, +            indent=indent, ensure_ascii=self.ensure_ascii) + +        if not self.ensure_ascii: +            return bytes(ret.encode(self.charset)) +        return ret  class UnicodeJSONRenderer(JSONRenderer): @@ -332,7 +337,7 @@ class BrowsableAPIRenderer(BaseRenderer):          renderer_context['indent'] = 4          content = renderer.render(data, accepted_media_type, renderer_context) -        if not all(char in string.printable for char in content): +        if renderer.charset is None:              return '[%d bytes of binary content]' % len(content)          return content | 
