我看到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。谢谢!
答案 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
- 正如我上面提到的那样,它只能被解码。