在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中,str
和bytes
类型之间没有区别,那么line.decode()
会做什么?
此特殊情况也使用cp1252
single-char编码,其在Python 2中的字节不会改变,那么.decode()
在这种特定情况下做了什么?对于Python 2中的所有单字节编码,它是NOP吗?
答案 0 :(得分:2)
您应该使用io.open()
并在Python 2和3上获得相同的行为 - >生成Unicode字符串。内置的Python 3 open()
是io.open()
的别名,{2}中也提供了io
。
是的,在Python 2中bytes
是str
的别名;但是Python 3中的str
不是同一类型! Python 2中的unicode
类型已重命名为str
。 str.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
解码功能:可从类似于编码的教程点获得 必须以用于编码的相同格式进行解码。