str.encode(encoding='utf-8', errors='strict') 是否可能引发 UnicodeError?

Is it possible for str.encode(encoding='utf-8', errors='strict') to raise UnicodeError?

我正在编写一些需要同时使用 Py2.7 和 Py3.7+ 的代码。

我需要使用 UTF-8 编码将文本写入文件。我的代码如下所示:

import six
...
content = ...
if isinstance(content, six.string_types):
    content = content.encode(encoding='utf-8', errors='strict')

# write 'content' to file

以上,content.encode() 是否可以从 Py2.7 或 Py3.7+ 引发 UnicodeError?我想不出这是可能的场景。我不是 Python 专家,所以我认为一定存在边缘情况。

以下是我认为它永远不会提高的原因 UnicodeError:

是的,有可能:

import six

content = ''.join(map(chr, range(0x110000)))
if isinstance(content, six.string_types):
    content = content.encode(encoding='utf-8', errors='strict')

结果(Try it online!,使用 Python 3.7.4):

Traceback (most recent call last):
  File ".code.tio", line 5, in <module>
    content = content.encode(encoding='utf-8', errors='strict')
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 55296-57343: surrogates not allowed

UnicodeEncodeErrorUnicodeError