也有类似的错误,但我找不到bz2的解决方案。在
以下程序解压缩失败:
import bz2
un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
decoded_un = bz2.decompress(un)
decoded_pw = bz2.decompress(pw)
print(decoded_un)
print(decoded_pw)
我试过使用bytes(un, 'UTF-8)
,但这行不通。我想我在Python3.3中没有这个问题。在
编辑:这是为Python挑战赛准备的,我有两段代码,感谢Martijn:
^{pr2}$这幅作品来自于以下网页:
# http://www.pythonchallenge.com/pc/def/integrity.html
import urllib.request
import re
import os.path
import bz2
fname = "008.html"
if not os.path.isfile(fname):
url = 'http://www.pythonchallenge.com/pc/def/integrity.html'
response = urllib.request.urlopen(url)
webpage = response.read().decode("utf-8")
with open(fname, "w") as fh:
fh.write(webpage)
with open(fname, "r") as fh:
webpage = fh.read()
re_un = '\\nun: \'(.*)\'\\n'
m = re.search(re_un, webpage)
un = m.group(1)
print(un)
pw_un = '\\npw: \'(.*)\'\\n'
m = re.search(pw_un, webpage)
pw = m.group(1)
print(pw)
unde = un.encode('latin-1').decode('unicode_escape').encode('latin1')
pwde = pw.encode('latin-1').decode('unicode_escape').encode('latin1')
decoded_un = bz2.decompress(unde)
decoded_pw = bz2.decompress(pwde)
print(decoded_un)
print(decoded_pw)
bz2
库处理bytes
对象,而不是字符串:换句话说,使用
^{pr2}$bytes()
就可以了,只需确保使用了正确的编码。UTF-8不是这种编码方式;如果您将字节屏蔽为字符串字符编码点,请使用拉丁语1进行编码;拉丁语1将字符一对一映射到字节:或者
{另请参见^ a1:
^{bq}$我把解码留给你。玩Python挑战吧!在
请注意,如果您从网页加载这些字符,它们将而不是!您将得到字符},而不是十六进制值为82的代码点。首先需要将这些序列解释为Python字符串文本:
'\'
、'x'
、8
和{注意
un
表示中的双反斜杠。只有最后的bytes
结果才是可解压缩的!在相关问题 更多 >
编程相关推荐