31 lines
895 B
Python
31 lines
895 B
Python
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')
|