通过强制转换为 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 中使用显式编解码器才能在 str
和 bytes
之间进行转换。
将 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 中使用显式编解码器才能在 str
和 bytes
之间进行转换。