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

时间:2013-06-12 10:44:45

标签: python unicode encoding utf-8 python-2.x

我看到the Python manual提到.encode().decode()字符串方法。在Python CLI上玩游戏我发现我可以使用与“常规”字符串u'hello'不同的数据类型创建unicode字符串'hello',并且可以使用str()进行转换/转换。但是当使用ASCII 127 u'שלום'以上的字符时,真正的问题开始了,我很难确切地确定究竟发生了什么。

Stack Overflow is overflowing with examples of confusion regarding Python's {{ 3}} unicode and string-encoding/decoding

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

为了那些稍后会阅读的人的兴趣,我认为应该解决Python 2和Python 3。谢谢!

1 个答案:

答案 0 :(得分:2)

这只是Python 2中的情况。在Python 2的字符串上存在decode方法是一个疣,在Python 3中已经改变了(其中等价的bytes只有decode)。

您无法'编码'已编码的字符串。在encode上调用str时会发生什么情况,Python使用默认编码(通常是ASCII)隐式调用上的decode。这几乎总是不是你想要的。在将str转换为不同的编码之前,应始终调用decode将str转换为unicode。

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

在Python 3中,默认情况下字符串是unicode。你只能将它们编码为bytes - 正如我上面提到的那样,它只能被解码。