将字节非转义十六进制字符串转换为字符串

2024-09-28 18:59:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我取消了一个网站脚本,我遇到了一个变量 var string = "\x61\x48\x52\x30\x63\x44\x6f\x76\x4c\x33\x42\x73\x64\x43\x35\x68\x62\x6d\x6c\x74\x5a\x57\x68\x6c\x59\x58\x5a\x6c\x62\x69\x35\x6c\x64\x53\x7c\x72\x63\x33\x6c\x6b\x63\x32\x51\x76\x51\x6c\x38\x74\x58\x31\x52\x6f\x5a\x56\x7c\x43\x5a\x57\x64\x70\x62\x6d\x35\x70\x62\x6d\x63\x74\x4c\x54\x45\x74\x4c\x54\x45\x31\x4d\x6a\x41\x77\x4e\x44\x51\x78\x4d\x7a\x63\x75\x62\x58\x41\x30\x50\x33\x64\x33\x4e\x58\x63\x30\x4d\x51\x3d\x3d"

它是长字符串的一部分,所以我将它作为子字符串变量存储在python中,如下所示:

假设拥有我需要的脚本的div存储在一个div变量中,因此script = div.script.text返回我需要的脚本,然后我搜索上面从st = script.find("var string=")开始的字符串和这个字符串的结尾end = script.find(";", k),现在我可以使用string = script[st + 11: end - 1]形成这个字符串,现在如果我运行print(string)它就会打印出来

"\x61\x48\x52\x30\x63\x44\x6f\x76\x4c\x33\x42\x73\x64\x43\x35\x68\x62\x6d\x6c\x74\x5a\x57\x68\x6c\x59\x58\x5a\x6c\x62\x69\x35\x6c\x64\x53\x7c\x72\x63\x33\x6c\x6b\x63\x32\x51\x76\x51\x6c\x38\x74\x58\x31\x52\x6f\x5a\x56\x7c\x43\x5a\x57\x64\x70\x62\x6d\x35\x70\x62\x6d\x63\x74\x4c\x54\x45\x74\x4c\x54\x45\x31\x4d\x6a\x41\x77\x4e\x44\x51\x78\x4d\x7a\x63\x75\x62\x58\x41\x30\x50\x33\x64\x33\x4e\x58\x63\x30\x4d\x51\x3d\x3d"

但我无法得到它的实际值,在终端中运行python将显示以下结果

>>> string = "\x61\x48\x52\x30\x63\x44\x6f\x76\x4c\x33\x42\x73\x64\x43\x35\x68\x62\x6d\x6c\x74\x5a\x57\x68\x6c\x59\x58\x5a\x6c\x62\x69\x35\x6c\x64\x53\x7c\x72\x63\x33\x6c\x6b\x63\x32\x51\x76\x51\x6c\x38\x74\x58\x31\x52\x6f\x5a\x56\x7c\x43\x5a\x57\x64\x70\x62\x6d\x35\x70\x62\x6d\x63\x74\x4c\x54\x45\x74\x4c\x54\x45\x31\x4d\x6a\x41\x77\x4e\x44\x51\x78\x4d\x7a\x63\x75\x62\x58\x41\x30\x50\x33\x64\x33\x4e\x58\x63\x30\x4d\x51\x3d\x3d"
>>> string
'aHR0cDovL3BsdC5hbmltZWhlYXZlbi5ldS|rc3lkc2QvQl8tX1RoZV|CZWdpbm5pbmctLTEtLTE1MjAwNDQxMzcubXA0P3d3NXc0MQ=='

'aHR0cDovL3BsdC5hbmltZWhlYXZlbi5ldS|rc3lkc2QvQl8tX1RoZV|CZWdpbm5pbmctLTEtLTE1MjAwNDQxMzcubXA0P3d3NXc0MQ=='是我需要的,那么如何得到它呢?你知道吗


Tags: stringx64x74x4cx33x62x58x30
3条回答

我很早以前就找到了解决方法,但忘了把答案贴出来,所以很抱歉那些遇到同样问题的人。你知道吗

首先,我们需要通过删除\x来转义十六进制字符串:

un_escaped_hex_string = "\x61\x48\x52\..."
escaped_hex_string = un_escaped_hex_string.replace("\\x", "")

删除\x之后,我们生成了一个十六进制字符串,因此,要获取它的值,我们执行以下操作:

byte_value = bytes.fromhex(escaped_hex_string)
value = byte_value.decode('utf-8')

您的字符串是Base64编码的—它有特定的外观,并且结尾的==是一个完全的赠品。可以使用^{} module将其转换回字节字符串。你知道吗

import base64
base64.b64decode(string)

您可以使用ast.literal_eval,因为所讨论的Javascript字符串文字也是有效的Python字符串文字。你知道吗

>>> x = r'"\x61\x48"'
>>> ast.literal_eval(x)
'aH'

相关问题 更多 >