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
:
six.string_types
涵盖三种类型:Py2.7str
&unicode
,Py3.7+str
- 所有这些类型都可以始终编码为 UTF-8。
是的,有可能:
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
而UnicodeEncodeError
是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
:
six.string_types
涵盖三种类型:Py2.7str
&unicode
,Py3.7+str
- 所有这些类型都可以始终编码为 UTF-8。
是的,有可能:
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
而UnicodeEncodeError
是UnicodeError
。