from rest_framework.renderers import JSONRenderer import json class UTF8JSONRenderer(JSONRenderer): """ JSON renderer that preserves UTF-8 characters (like emojis) instead of escaping them. """ charset = 'utf-8' def render(self, data, accepted_media_type=None, renderer_context=None): if data is None: return bytes() renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) if indent is None: separators = (',', ':') else: separators = (',', ': ') ret = json.dumps( data, ensure_ascii=False, indent=indent, separators=separators ) # Handle invalid surrogate characters by using 'surrogatepass' error handler return ret.encode('utf-8', errors='surrogatepass')