`line.decode()`在Python 2中做了什么?

时间:2014-10-20 10:14:38

标签: python python-2.7 python-3.x encoding

在Python 3中,我必须解码文件中的行以从str获取bytes。为了使它与Python 2兼容,我以二进制模式打开文件,并在读取行上使用.decode()方法(在Python 2中,encoding调用没有open()个关键字。

for line in open('README.txt', 'rb'):
  # Decode to a fail-safe string for PY3
  line = line.decode('cp1252')

在Python 2中,strbytes类型之间没有区别,那么line.decode()会做什么?

此特殊情况也使用cp1252 single-char编码,其在Python 2中的字节不会改变,那么.decode()在这种特定情况下做了什么?对于Python 2中的所有单字节编码,它是NOP吗?

3 个答案:

答案 0 :(得分:2)

您应该使用io.open()并在Python 2和3上获得相同的行为 - >生成Unicode字符串。内置的Python 3 open()io.open()的别名,{2}中也提供了io

是的,在Python 2中bytesstr的别名;但是Python 3中的str不是同一类型! Python 2中的unicode类型已重命名为strstr.decode()生成unicode个对象,与bytes.decode()生成Python 3 str的方式相同。

答案 1 :(得分:1)

decode在Python 2中的字符串上给出了一个unicode对象。

您可以使用type

进行检查
>>> line = "ABC"
>>> type(line)
<type 'str'>
>>> line = line.decode("cp1252")
>>> type(line)
<type 'unicode'>
>>> line
u'ABC'

答案 2 :(得分:0)

要开始解码,我们可能需要了解一些基础知识

编码功能:http://www.tutorialspoint.com/python/string_encode.htm

Python内置了许多编解码器,可以实现为C函数,也可以使用字典作为映射表。阅读更多内容 编码标准:https://docs.python.org/2/library/codecs.html#standard-encodings

解码功能:可从类似于编码的教程点获得 必须以用于编码的相同格式进行解码。