【问题标题】:How to decode hex values from a string in python如何从python中的字符串解码十六进制值
【发布时间】:2019-01-02 19:44:54
【问题描述】:

我正在尝试解码字符串中的十六进制值,所以最后我有一个“可读”字符串。

例如:

encoded_string = 'videoplayback%253Fexpire%253D1532566750%2526mime%253Dvideo%25252Fmp4%2526key%253Dyt6%2526mt%253D1532544983%2526fvip%253D5%2526i'

每个十六进制值都由一个 % 符号表示,值的长度可以区分。 我尝试的是手动解码字符串:

encoded_string = encoded_string.replace('%253A', '\x25\x3A')
encoded_string = encoded_string.replace('%252F', '\x25\x2F')
encoded_string = encoded_string.replace('%253F', '\x25\x3F')
encoded_string = encoded_string.replace('%253D1532566750', '\x25\x3D\x15\x32\x56\x67\x50')

现在我需要一个能够找到十六进制值并对其进行解码的函数的帮助。

谢谢你们!

【问题讨论】:

    标签: python string hex decode


    【解决方案1】:

    工作量太大。

    >>> urllib.parse.unquote(urllib.parse.unquote(encoded_string))
    'videoplayback?expire=1532566750&mime=video%2Fmp4&key=yt6&mt=1532544983&fvip=5&i'
    

    【讨论】:

    • 不知道这个!非常感谢
    【解决方案2】:

    您可以为此使用正则表达式:

    re.sub(
        r'%([A-F0-9]{4,14})',
        lambda m: str(int(m.groups()[0], 16)),
        encoded_string
    )
    

    虽然我不确定你是否只想做 URL 解码?

    【讨论】:

    • 是的,我不知道有这个选项。谢谢
    • @DanielBörg 请注意,这与this answer 中的 URL 取消引用完全不同。在这里,您在 OP 中指定的十六进制字符串被如此处理并转换为相应的基数为 10 的整数字符串。比较结果以确保它是否真的是您想要的。
    猜你喜欢
    • 2014-12-28
    • 2020-11-11
    • 1970-01-01
    • 2018-08-21
    • 2020-10-23
    • 2011-03-18
    • 2019-07-27
    • 2018-08-12
    • 2011-03-04
    相关资源
    最近更新 更多