ACTIVATE_THIS = """
eJx1UsGOnDAMvecrIlYriDRlKvU20h5aaY+teuilGo1QALO4CwlKAjP8fe1QGGalRoLEefbzs+Mk
Sb7NcvRo3iTcoGqwgyy06As+HWSNVciKaBTFywYoJWc7yit2ndBVwEkHkIzKCV0YdQdmkvShs6YH
E3IhfjFaaSNLoHxQy2sLJrL0ow98JQmEG/rAYn7OobVGogngBgf0P0hjgwgt7HOUaI5DdBVJkggR
3HwSktaqWcCtgiHIH7qHV+esW2CnkRJ+9R5cQGsikkWEV/J7leVGs9TV4TvcO5QOOrTHYI+xeCjY
JR/m9GPDHv2oSZunUokS2A/WBelnvx6tF6LUJO2FjjlH5zU6Q+Kz/9m69LxvSZVSwiOlGnT1rt/A
77j+WDQZ8x9k2mFJetOle88+lc8sJJ/AeerI+fTlQigTfVqJUiXoKaaC3AqmI+KOnivjMLbvBVFU
1JDruuadNGcPmkgiBTnQXUGUDd6IK9JEQ9yPdM96xZP8bieeMRqTuqbxIbbey2DjVUNzRs1rosFS
TsLAdS/0fBGNdTGKhuqD7mUmsFlgGjN2eSj1tM3GnjfXwwCmzjhMbR4rLZXXk+Z/6Hp7Pn2+kJ49
jfgLHgI4Jg==
""".decode("base64").decode("zlib")
我的代码:
import zlib
print 'dsss'.decode('base64').decode('zlib')#error
Traceback (most recent call last):
File "D:\zjm_code\b.py", line 4, in <module>
print 'dsss'.decode('base64').decode('zlib')
File "D:\Python25\lib\encodings\zlib_codec.py", line 43, in zlib_decode
output = zlib.decompress(input)
zlib.error: Error -3 while decompressing data: unknown compression method
a='dsss'.encode('zlib')
print a
a.encode('base64')
print a
a.decode('base64')#error
print a
a.decode('zlib')
print a
x\x9cK)..Traceback (most recent call last):
File "D:\zjm_code\b.py", line 7, in <module>
a.decode('base64')
File "D:\Python25\lib\encodings\base64_codec.py", line 42, in base64_decode
output = base64.decodestring(input)
File "D:\Python25\lib\base64.py", line 321, in decodestring
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
a='dsss'
a=a.encode('zlib')
print a
a=a.decode('zlib')
print a#why can't print 'dsss'
x\x9cK)..
a='dsss'
a=a.encode('zlib')
#print a
a=a.decode('zlib')
print a#its ok
我认为'print a'用'uhf-8'编码a。 这样:
#encoding:utf-8
a='dsss'
a=a.encode('zlib')
print a
a=a.decode('utf-8')#but error.
a=a.decode('zlib')
print a#
x\x9cK)..Traceback (most recent call last):
File "D:\zjm_code\b.py", line 5, in <module>
a=a.decode('utf-8')
File "D:\Python25\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: unexpected code byte
答案 0 :(得分:4)
字符串中的数据是编码和压缩的二进制数据。 .decode("base64").decode("zlib")
取消编码并解压缩。
你得到的错误是因为从base64解码的'dsss'不是有效的zlib压缩数据。
答案 1 :(得分:3)
x.decode(”base64”).decode(”zlib”) for x in ("sss", "dsss", random_garbage)
的目的是什么?对不起,你应该知道;你就是那个人!
在OP添加各种谜题后进行编辑
拼图1
a='dsss'.encode('zlib')
print a
a.encode('base64')
print a
a.decode('base64')#error
print a
a.decode('zlib')
print a
决议:表格的所有3个陈述
a.XXcode('encoding')
应该是
a = a.XXcode('encoding')
拼图2
a='dsss'
a=a.encode('zlib')
print a
a=a.decode('zlib')
print a#why can't print 'dsss'
x\x9cK)..
但确实打印'dsss':
>>> a='dsss'
>>> a=a.encode('zlib')
>>> print a
x£K)..♠ ♦F☺¥
>>> a=a.decode('zlib')
>>> print a#why can't print 'dsss'
dsss
>>>
拼图3
“”“我认为'打印'用'uhf-8'对a进行编码。”“”
决议:您认为非常不正确。 print
后面的内容是表达式。没有这样的副作用。当你这样做时,你会想到什么:
print 'start text ' + a + 'end text'
如果你做print a
两次,你会想到什么?再次编码已编码的文本?你为什么不停止想象并试试呢?
在任何情况下,请注意str.encode('zlib')的输出是str对象,而不是unicode对象:
>>> print repr('dsss'.encode('zlib'))
'x\x9cK)..\x06\x00\x04F\x01\xbe'
从那里转到UTF-8会有点困难......它必须首先被解码为unicode - 用什么编解码器? ascii
和utf8
会遇到'\ x9c'和'\ xbe'......
答案 2 :(得分:1)
.decode('base64')
只能在一个编码为“base-64”的字符串上调用,以便检索那里编码的字节序列。据推测,你带来的字节序列是zlib压缩的,所以.decode('zlib')
部分解压缩它。
现在,就你的情况而言:
>>> 'dsss'.decode('base64')
'v\xcb,'
但是'v\xcv,'
不是zlib压缩的字符串!所以当然你不能要求zlib“解压缩”它。幸运的是,zlib
认识到这一事实('v\xcv,'
不可能通过应用任何压缩算法zlib
知道任何输入而产生,因此给你一个有用的错误信息(而不是随机的字节串,如果你随机提供了一个不同但同样疯狂的输入字符串,你可能会得到它! - )
修改:
中的错误a.encode('base64')
print a
a.decode('base64')#error
显然是因为字符串是不可变的:只是调用a.encode
(或任何其他方法)不改变a
,它产生一个新的字符串对象(在这里你只是打印它)。
在下一个片段中,错误只出在OP的脑海中:
>>> a='dsss'
>>> a=a.encode('zlib')
>>> print a
x?K)..F?
>>> a=a.decode('zlib')
>>> print a#why can't print 'dsss'
dsss
>>>
“为什么无法打印”这个问题真的很奇怪,适用于做打印'dsss'的代码。最后,
我认为'打印'编码a 用'uhf-8'。
你错误地认为:没有“uhf-8”(你的意思是“utf-8”可能?),无论如何print a
不改变{{1} },不仅仅是调用a
。
答案 3 :(得分:1)
它的反面是:
original_message.encode('zlib').encode('base64')
zlib是一种二进制压缩算法。 base64是二进制数据的文本编码,用于通过SMTP等文本协议发送二进制消息。
在'dsss'从base64(三个字节76h,CBh,2Ch)解码后,结果是无效的zlib压缩数据,因此无法解码。
尝试打印ACTIVATE_THIS以查看解码结果。事实证明这是一些Python代码。