Python 2 中的 `line.decode()` 是做什么的?
在Python 3中,我需要把文件中的行从字节(bytes
)解码成字符串(str
)。为了让它能在Python 2中也能用,我以二进制模式打开文件,然后对读取的行使用.decode()
方法(在Python 2中,打开文件时没有encoding
这个参数)。
for line in open('README.txt', 'rb'):
# Decode to a fail-safe string for PY3
line = line.decode('cp1252')
在Python 2中,str
和bytes
类型没有区别,那么line.decode()
到底是干什么的呢?
而且在这个特定的情况下,使用的是cp1252
这种单字节编码,在Python 2中它的字节不会改变,那么在这个特定情况下,.decode()
又有什么作用呢?对于所有单字节编码来说,在Python 2中它是个无操作(NOP)吗?
3 个回答
0
要开始解码的内容,我们需要了解一些基本知识。
编码函数:http://www.tutorialspoint.com/python/string_encode.htm
Python自带了很多编码工具,这些工具要么是用C语言写的函数,要么是用字典作为映射表。下面会有更多的介绍。
编码标准:https://docs.python.org/2/library/codecs.html#standard-encodings
解码函数:可以在教程网站上找到,和编码的内容类似。解码时必须使用和编码时相同的格式。
1
在Python 2中,对一个字符串使用decode
会得到一个unicode对象。
你可以用type
来检查它的类型:
>>> line = "ABC"
>>> type(line)
<type 'str'>
>>> line = line.decode("cp1252")
>>> type(line)
<type 'unicode'>
>>> line
u'ABC'