aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/renderers.py
diff options
context:
space:
mode:
authorTom Christie2013-05-20 21:00:56 +0100
committerTom Christie2013-05-20 21:00:56 +0100
commitf19e0d544fdcd318c2bde2057d91777beda78915 (patch)
tree16b48c2cca2fe887b7fd16247ebd6c6b9e172d70 /rest_framework/renderers.py
parent6fcffcc9c65d789b02c07372e3f4dd2f9ef5eba3 (diff)
downloaddjango-rest-framework-f19e0d544fdcd318c2bde2057d91777beda78915.tar.bz2
Fix charset issues
Diffstat (limited to 'rest_framework/renderers.py')
-rw-r--r--rest_framework/renderers.py13
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