我正在尝试解码以下字符串:
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'
和其他一些解码,但我的尝试均未成功。关于如何执行此操作的任何想法?
您的数据似乎是一个二进制字符串,其中奇数\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/
您现在可以执行获取第一个链接所需的任何字符串操作。
快速浏览,我可以告诉您二进制部分是某种标题,其中包含有关数据的信息。不确定标题中的每个数字,最后一个字节之前的数字包含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( ... )