通过强制转换为 str 来转换 Python unicode 是否可逆?

Is converting Python unicode by casting to str reversible?

将 unicode 字符串 u 转换为 Python 中的(字节)字符串的正确方法是调用 u.encode(someencoding).

不幸的是,我以前不知道,我已经使用 str(u) 进行转换。特别是,我调用 str(u) 强制 u 成为一个字符串,这样我就可以使它成为一个有效的搁置键(必须是一个 str)。

由于没有遇到UnicodeEncodeError,所以我想知道这个过程是不是reversible/lossless。也就是说,我可以做 u = str(converted_unicode) (或 Python 3 中的 u = bytes(converted_unicode) )来得到原来的 u 吗?

在Python2中,如果用str()转换成功,那么就可以反转结果。在 unicode 值上使用 str() 等同于使用 unicode_value.encode('ascii'),反之就是简单地使用 str_value.decode('ascii')。使用 unicode(str_value) 将使用相同的隐式 ASCII 编解码器进行解码。

在 Python 3 中,在 unicode 值上调用 str() 只会返回相同的对象,因为在 Python 3 str() Unicode 类型。在没有编码的情况下对 Unicode 值使用 bytes() 会失败,您始终必须在 Python 3 中使用显式编解码器才能在 strbytes 之间进行转换。