返回信息流刚刚入门python,开始玩pythonchallenge,其中一个level要decompress一串密码,在把str变成bytes时候发现了一点小问题:
>>> un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
>>> un = un.encode()
发现un的内容变多了:
>>> un
b'BZh91AY&SYA\xc2\xaf\xc2\x82\r\x00\x00\x01\x01\xc2\x80\x02\xc3\x80\x02\x00 \x00!\xc2\x9ah3M\x07<]\xc3\x89\x14\xc3\xa1BA\x06\xc2\xbe\x084'
多出来很多xc2、xc3的东西
另外一个有趣的事情是:
>>> un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
>>> un
'BZh91AY&SYA?\x82\r\x00\x00\x01\x01\x80\x02A\x02\x00 \x00!\x9ah3M\x07<]E\x14áBA\x06 3/4 \x084'
>>> print(un)
?A !?h3M<]EáBA4
un竟然有三个模样,不知道是不是我默认编码问题
这是一条镜像帖。来源:北邮人论坛 / python / #13602同步于 2016/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
真正原汁原味地把str变成bytes的方法是什么?
MrWanted
2016/4/24镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
>>> "中国".encode("gb18030")
b'\xd6\xd0\xb9\xfa'
>>> b'\xd6\xd0\xb9\xfa'.decode("gb18030")
'中国'
str版:
un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
bytes版:
un =b 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
暖神,我的str字符串要想decompress就必须要转换成bytes类型,可是encode后内容就有变化了,不能在保留原始内容的前提下encode吗?
【 在 nuanyangyang 的大作中提到: 】
: [code=python]
: >>> "中国".encode("gb18030")
: b'\xd6\xd0\xb9\xfa'
: ...................
对。。手动输入是没问题的,可是把str变成bytes内容就变了。
【 在 asif12 的大作中提到: 】
: str版:
: un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
: bytes版:
: ...................
我只是希望我上面那个字符串从string到bytes,内容不变
【 在 Chon 的大作中提到: 】
: 从 string 到 bytes,你希望使用什么编码 encode ?
decompress的话,是不是人家本来是给一个文件的,然后你打开,然后解压缩?
打开文件的时候可以用"rb"选项,直接读成bytes。
with open("channel.zip", rb) as f:
content = f.read()
【 在 MrWanted 的大作中提到: 】
: 暖神,我的str字符串要想decompress就必须要转换成bytes类型,可是encode后内容就有变化了,不能在保留原始内容的前提下encode吗?
>>> un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
>>> bytes(map(ord,un))
b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'