str.encode 期望输入什么?

What does str.encode expect as input?

我希望对项目中的所有字符串使用 unicode 而不是 str。我正在尝试使用 str.encode 方法,但无法从文档中弄清楚 encode 方法究竟做了什么或期望作为输入。

希腊小写字母pi为U+03C0,UTF-8编码为0xCF 0x80。我得到以下信息:

>>> s1 = '\xcf\x80'
>>> s1.encode('utf-8','ignore')

Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    s1.encode('utf-8','ignore')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 0: ordinal not in range(128)

我试过:

>>> s2='\x03\xc0'

>>> s2.encode('utf-8','ignore')

Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    s2.encode('utf-8','ignore')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 1: ordinal not in range(128)

encode 期望输入什么,为什么 'ignore' 选项不忽略错误?我试过 'replace' 也没有掩盖错误。

在Python2.x中,str是字节串(已编码)。您可以将其解码为 un​​icode 对象:

>>> s1 = '\xcf\x80'  # string literal (str)
>>> s1.decode('utf-8')
u'\u03c0'

对于unicode对象,你可以做encode:

>>> u1 = u'\u03c0'  # unicode literal (unicode)  U+03C0
>>> u1.encode('utf-8')
'\xcf\x80'