嗨,我正在尝试将一些代码迁移到Python3,但是遇到了以下问题。在
Python2
>>> a = chr(217)
>>> print a, type(a)
� <type 'str'>
Python3
^{pr2}$原因是我已经用下面的代码创建了现有的数据
from Crypto.Cipher import AES
fle = open("data.dat", "wt")
key = "password000*****"
pwd = AES.new(key, AES.MODE_ECB)
for dat in ("dataname001*****", "dataname002*****"):
txt = ""
hsh = pwd.encrypt(dat)
for c in hsh:
txt = txt + str(ord(c)) + ","
fle.write("%s\n" % txt[:-1])
fle.close()
我需要读我可以用python2而不是python3来读取数据
fle = open("data.dat", "rt")
for dat in fle:
txt = ""
for c in dat.split(","):
txt = txt + chr(int(c))
print(pwd.decrypt(txt))
那是一个完全的复制品。对于“精确”的某些定义。在
你看到的区别是:
python3中的
chr()
实际上是python2unichr()
。这可能就是现在正确打印字符的原因。“Types”是Python 2.2之前的一个老东西。由于向后兼容性的原因,
str
类在python2中被称为“type”。它现在被称为“类”,就像所有其他类一样。还有一个你看不到的区别:
str
类并不完全兼容。Python3实际上更像Python2的unicode
类。但这在你的例子中并不是一个相关的区别。在添加另一个观点,说明为什么它可能无法按预期工作。python3中用作
chr
参数的数字应该是Unicode代码点。现在它取决于data.dat
内容在写入过程中是如何编码的,以及在读回时是如何解码的。在我注意到,您正在以文本模式读取文件。然后,在Python2中,您可能需要使用标准的Python2模块^{} 来正确地读取内容。可能,使用^{} 代替普通的
open()
。在^{} in Python3.x 与{a2}相似。在
如果需要字节字符串,请使用^{} :
或^{} :
^{pr2}$相关问题 更多 >
编程相关推荐