解码以下字符串以获取URL

问题描述 投票:0回答:2

我正在尝试解码以下字符串: b'\x08\x13"\xc2\xaf\x01https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/\xc3\x92\x01\xc2\xb3\x01https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/amp/'

在Python 3.6中,但到目前为止还没有成功。我需要获得第一个链接。

我尝试使用'cp1252''UTF-8''UTF-16'和其他一些解码,但我的尝试均未成功。关于如何执行此操作的任何想法?

python arrays decoding
2个回答
0
投票

您的数据似乎是一个二进制字符串,其中奇数\x...组件是二进制字符串前面和里面的Unicode字符。您提到需要获得第一个链接,并且在您的示例中看到两个不同的URL。

运行以下代码:

value = b'\x08\x13"\xc2\xaf\x01https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/\xc3\x92\x01\xc2\xb3\x01https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/amp/'
print(value.decode('utf-8'))

产量:

"¯https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/Ò³https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/amp/

您现在可以执行获取第一个链接所需的任何字符串操作。


0
投票

快速浏览,我可以告诉您二进制部分是某种标题,其中包含有关数据的信息。不确定标题中的每个数字,最后一个字节之前的数字包含URL长度。对于第一个URL,长度为0xAF,对于第二个URL,长度为0xB3:

>>> a = 'https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/'
>>> len(a)
175
>>> hex(len(a))
'0xaf'
>>> b = 'https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/amp/'
>>> hex(len(b))
'0xb3'
>>>

我没有有关其余二进制数据的足够信息,并且我不知道URL长度超过255时会发生什么,但是对于您的字符串分析,我建议找到http://字符串,步行2字节返回,读取长度并提取整个URL,然后从提取的URL的末尾重新开始:

c = 'your data which I dont copy again, but you should =)'
pos = 0
while True :
    url_start = c.find( 'http', pos )
    if url_start == -1 : break
    url_length = ord(c[url_start - 2])
    print 'start', url_start, 'length', url_length
    print c[url_start:url_start + url_length]
    pos = url_start + url_length

将为您提供以下输出:

start 6 length 175
https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/
start 187 length 179
https://www.ilfattoquotidiano.it/2020/01/11/zingaretti-dopo-le-regionali-sciolgo-il-pd-e-lancio-partito-nuovo-orlando-ragionare-su-come-rifondare-orfini-non-sia-fuffa/5664444/amp/

ps。如果您使用的是python3,则可以在括号中使用print( ... )

© www.soinside.com 2019 - 2024. All rights reserved.