diff --git a/django/utils/encoding.py b/django/utils/encoding.py index 3b284f3ed0..b0872471c2 100644 --- a/django/utils/encoding.py +++ b/django/utils/encoding.py @@ -98,25 +98,13 @@ def force_text(s, encoding='utf-8', strings_only=False, errors='strict'): if hasattr(s, '__unicode__'): s = s.__unicode__() else: - try: - if six.PY3: - if isinstance(s, bytes): - s = six.text_type(s, encoding, errors) - else: - s = six.text_type(s) + if six.PY3: + if isinstance(s, bytes): + s = six.text_type(s, encoding, errors) else: - s = six.text_type(bytes(s), encoding, errors) - except UnicodeEncodeError: - if not isinstance(s, Exception): - raise - # If we get to here, the caller has passed in an Exception - # subclass populated with non-ASCII data without special - # handling to display as a string. We need to handle this - # without raising a further exception. We do an - # approximation to what the Exception's standard str() - # output should be. - s = ' '.join([force_text(arg, encoding, strings_only, - errors) for arg in s]) + s = six.text_type(s) + else: + s = six.text_type(bytes(s), encoding, errors) else: # Note: We use .decode() here, instead of six.text_type(s, encoding, # errors), so that if s is a SafeBytes, it ends up being a