make event stdout encoding more resilient to UTF-16 surrogate pairs

see: https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
This commit is contained in:
Ryan Petrello
2020-08-17 14:35:40 -04:00
parent e7281a753f
commit 33e2c059ed
3 changed files with 20 additions and 1 deletions

View File

@@ -7,6 +7,24 @@ from prometheus_client.parser import text_string_to_metric_families
# Django REST Framework
from rest_framework import renderers
from rest_framework.request import override_method
from rest_framework.utils import encoders
class SurrogateEncoder(encoders.JSONEncoder):
def encode(self, obj):
ret = super(SurrogateEncoder, self).encode(obj)
try:
ret.encode()
except UnicodeEncodeError as e:
if 'surrogates not allowed' in e.reason:
ret = ret.encode('utf-8', 'replace').decode()
return ret
class DefaultJSONRenderer(renderers.JSONRenderer):
encoder_class = SurrogateEncoder
class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer):