首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“sss”.decode(“base64”).decode(“zlib”)的目的

“sss”.decode(“base64”).decode(“zlib”)的目的
EN

Stack Overflow用户
提问于 2010-01-10 01:35:00
回答 4查看 3.8K关注 0票数 1
代码语言:javascript
复制
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")

我的代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
a='dsss'
a=a.encode('zlib')
print a
a=a.decode('zlib')
print a#why can't print 'dsss'

x\x9cK)..

代码语言:javascript
复制
a='dsss'
a=a.encode('zlib')
#print a
a=a.decode('zlib')
print a#its ok

我认为“打印a”用“超高频-8”编码a。因此:

代码语言:javascript
复制
#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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-10 01:36:47

字符串中的数据是编码和压缩的二进制数据。.decode("base64").decode("zlib")对其进行解译和解压缩。

您得到的错误是因为从base64解码的'dsss‘不是有效的zlib压缩数据。

票数 4
EN

Stack Overflow用户

发布于 2010-01-10 03:06:55

x.decode(”base64”).decode(”zlib”) for x in ("sss", "dsss", random_garbage)的目的是什么?对不起,你应该知道,是你干的!

OP添加各种谜题后的编辑

难题1

代码语言:javascript
复制
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

代码语言:javascript
复制
a='dsss'
a=a.encode('zlib')
print a
a=a.decode('zlib')
print a#why can't print 'dsss'

x\x9cK)..

但是它打印'dsss':

代码语言:javascript
复制
>>> a='dsss'
>>> a=a.encode('zlib')
>>> print a
x£K)..♠ ♦F☺¥
>>> a=a.decode('zlib')
>>> print a#why can't print 'dsss'
dsss
>>>

难题3

“我认为‘打印’a‘用’uhf-8‘编码a。”

决议:你想得太错误了。print后面的是一个表达式。没有这样的副作用。当你这样做时,你会想到会发生什么:

代码语言:javascript
复制
print 'start text ' + a + 'end text'

如果你做了两次print a,你会想到会发生什么?再次编码已经编码的文本?你为什么不停止想象,试试呢?

无论如何,请注意str.encode('zlib')的输出是一个str对象,而不是unicode对象:

代码语言:javascript
复制
>>> print repr('dsss'.encode('zlib'))
'x\x9cK)..\x06\x00\x04F\x01\xbe'

从那里到UTF-8会有点困难.它必须首先被解码为unicode --用什么编解码器?asciiutf8在“\x9c”和“\xbe”中会有麻烦.

票数 3
EN

Stack Overflow用户

发布于 2010-01-10 01:52:18

.decode('base64')只能在编码为"base-64“的字符串上调用,以便检索已编码的字节序列。在您所带来的示例中,该字节序列可能是zlib压缩的,因此.decode('zlib')部分对其进行解压。

现在,就你的情况而言:

代码语言:javascript
复制
>>> 'dsss'.decode('base64')
'v\xcb,'

但是'v\xcv,'不是一个zlib压缩的字符串!因此,您当然不能要求zlib“解压缩”它。幸运的是,zlib认识到了一个事实( 'v\xcv,'不可能是通过应用zlib知道的任何压缩算法来生成的),因此给出了一个有用的错误消息(而不是一个随机的字节字符串,如果您随机地提供了一个不同但同样疯狂的输入字符串,您很可能会得到它!)

编辑

代码语言:javascript
复制
a.encode('base64')
print a
a.decode('base64')#error

这显然是因为字符串是不可变的:只要调用a.encode (或任何其他方法)而不是ALTERa,它就会生成一个新的string对象(这里只需要打印它)。

在下一个片段中,错误只出现在OP的脑海中:

代码语言:javascript
复制
>>> a='dsss'
>>> a=a.encode('zlib')
>>> print a
x?K)..F?
>>> a=a.decode('zlib')
>>> print a#why can't print 'dsss'
dsss
>>> 

“为什么不能打印”这个问题真的很奇怪,适用于打印‘dss’的代码。最后,

我认为‘打印a’编码a与‘超高频-8’。

你想错了:根本就没有"uhf-8“这样的东西(你的意思是"utf-8”可能?),而且无论如何,print a 不改变a,只是叫a.encode改变a

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2035727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档