Python字符串和str()方法的编码和解码



我看到Python手册提到了.encode().decode()字符串方法。在Python CLI上玩,我看到我可以创建具有不同数据类型的unicode字符串u'hello',而不是"常规"字符串'hello',并且可以使用str()转换/强制转换。但是当使用ASCII 127 u'שלום'以上的字符时,真正的问题开始了,我很难根据经验确定到底发生了什么。

Stack Overflow充满了关于Python的unicode和字符串编码/解码处理的混淆示例。

当使用str()方法编码和解码字符串时,特别是当字符串中包含不能用7个字节表示的字符时,究竟发生了什么(字节是如何改变的,以及数据类型是如何改变的)?它是真的,因为它似乎,一个Python变量的数据类型<type 'str'>可以编码和解码?如果它是编码的,我理解这意味着字符串由UTF-8、ISO-8859-1或其他编码表示,这是正确的吗?如果它被解码了,这意味着什么?解码后的字符串是unicode吗?如果有,那么为什么它们没有数据类型<type 'unicode'>呢?

为了那些稍后会读到这篇文章的人的兴趣,我认为应该解决Python 2和Python 3。谢谢你!

这只在Python 2中出现。在Python 2的字符串上存在decode方法是一个缺陷,这在Python 3中已经改变了(等效的bytes只有decode)。

你不能"编码"一个已经编码的字符串。当你在str上调用encode时,Python会使用默认编码隐式调用decode,通常是ASCII。这通常不是你想要的。在将str转换为其他编码之前,您应该始终调用decode将其转换为unicode。

(和解码字符串 unicode,他们类型<unicode>,所以我不知道你的意思是什么问题。)

当然,在Python 3中字符串默认是unicode。您只能将它们编码为bytes -正如我上面提到的,它只能被解码。

最新更新