Python 2 中的 `line.decode()` 是做什么的?

0 投票
3 回答
4593 浏览
提问于 2025-04-28 12:40

在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中,strbytes类型没有区别,那么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

解码函数:可以在教程网站上找到,和编码的内容类似。解码时必须使用和编码时相同的格式。

2

你应该使用 io.open() 这个方法,这样在Python 2和Python 3中都能得到相同的效果——生成Unicode字符串。Python 3中的 open() 函数其实是 io.open() 的一个别名,而 io 在Python 2中也可以用。

对了,在Python 2中,bytesstr 的一个别名;但是在Python 3中,str 可不是同一种类型!Python 2中的 unicode 类型被改名为 str。而 str.decode() 方法会生成 unicode 对象,就像 bytes.decode() 方法在Python 3中会生成 str 对象一样。

1

在Python 2中,对一个字符串使用decode会得到一个unicode对象。

你可以用type来检查它的类型:

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

撰写回答