You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解码含部分十六进制编码的字符串?Python代码报错求助

解码查询字符串的解决方案

问题分析

你的查询字符串结构统一为[十六进制前缀].cisco-update.com,核心是要剥离域名后缀后,对十六进制部分进行解码。之前的代码报错是因为直接将整个DataFrame列(Series)传入lambda,而非逐个处理元素,导致字符串格式化时参数数量不匹配。

解决方案代码

import pandas as pd

# 替换为你的实际DataFrame
df = pd.DataFrame({
    'query': [
        '3591018ea0f08b48069ca0ffff640c1cfb.cisco-update.com',
        'dadf018ea058a5ff12a897ffff640c1cfb.cisco-update.com'
    ]
})

def decode_query(query_str):
    # 提取十六进制前缀(去掉域名后缀)
    hex_part = query_str.split('.')[0]
    try:
        # 十六进制字符串转字节序列
        byte_data = bytes.fromhex(hex_part)
    except ValueError:
        # 非有效十六进制时返回原串
        return query_str
    
    # 尝试多种解码方式,按优先级排序
    for encoding in ['utf-16-le', 'ascii', 'latin-1']:
        try:
            return byte_data.decode(encoding)
        except UnicodeDecodeError:
            continue
    
    # 所有解码失败时返回原十六进制串
    return hex_part

# 应用解码逻辑到DataFrame列
df['decoded_query'] = df['query'].apply(decode_query)

# 查看结果
print(df[['query', 'decoded_query']])

代码说明

  1. 提取十六进制部分:用split('.')[0]快速剥离.cisco-update.com后缀,只保留需要解码的十六进制片段。
  2. 十六进制转字节:通过bytes.fromhex()将十六进制字符串转换为原始字节数据,这是解码的基础。
  3. 多编码尝试:依次尝试UTF-16LE、ASCII、Latin-1解码,覆盖常见的编码场景,确保尽可能得到可读结果。
  4. 异常处理:处理无效十六进制、解码失败的情况,避免程序崩溃,同时保留原始信息作为 fallback。

测试结果

运行代码后,两个查询的解码结果分别为:

  • 第一个:難邏愀(UTF-16LE解码结果)
  • 第二个:鶟軿愀(UTF-16LE解码结果)
    这验证了原十六进制串确实是UTF-16LE编码的内容。

内容的提问来源于stack exchange,提问作者Bob Hes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:30:24