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

Python中如何在每个十六进制字符前添加转义字符?

解决JSON转储时转义十六进制字符的问题

首先,你遇到的核心问题是混淆了字符串的实际内容和它的打印/表示形式。那些\x00、\x96并不是由\、x、0、0这些字符组成的字符串,而是单个的控制字符或扩展ASCII字符——直接用replace没成功,大概率是你替换的是字符串字面量"\x00",而非实际存在的那个特殊字符。

正确的手动替换方法

如果你的目标是把这些特殊字符替换成Python风格的转义字符串(比如把空字符\x00变成四个字符组成的\x00)再写入JSON,你需要直接针对实际字符进行替换:

import json

# 示例原始字符串,包含\x00和\x96
original_str = "Hello\x00World\x96Test"

# 替换目标字符:注意替换的是实际字符(比如'\x00'),而非字符串"\x00"
processed_str = original_str.replace('\x00', '\\x00').replace('\x96', '\\x96')

# 写入JSON文件
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump({"content": processed_str}, f, indent=2)

运行后,JSON文件里的内容会是:

{
  "content": "Hello\\x00World\\x96Test"
}

这里的\\x00是JSON的标准转义方式——因为JSON中反斜杠本身需要转义,所以最终存储的是\x00的字面量。

注意:JSON规范的限制

要提醒你的是,JSON本身并不支持\xXX这种转义格式,它只认可\uXXXX的Unicode转义(比如\x00会被JSON自动转成\u0000)。如果你只是想让特殊字符在JSON中被正确转义(而非一定要\xXX格式),其实不需要手动替换,json.dump会自动处理:

import json

original_str = "Hello\x00World\x96Test"

with open('output.json', 'w', encoding='utf-8') as f:
    json.dump({"content": original_str}, f, indent=2)

输出的JSON会是符合规范的格式:

{
  "content": "Hello\u0000World\u0096Test"
}

这种格式能被所有标准JSON解析器正确识别。

批量替换所有十六进制控制字符

如果你有大量这类字符需要处理,手动逐个替换太麻烦,可以写一个函数批量转换:

import json

def escape_hex_chars(s):
    result = []
    for char in s:
        ord_char = ord(char)
        # 过滤掉打印字符,只转义控制字符和扩展ASCII
        if (ord_char <= 0x1F or ord_char >= 0x80) and ord_char not in (0x0A, 0x0D):
            result.append(f'\\x{ord_char:02x}')
        else:
            result.append(char)
    return ''.join(result)

original_str = "Hello\x00World\x96Test\nAnother line"
processed_str = escape_hex_chars(original_str)

with open('output.json', 'w', encoding='utf-8') as f:
    json.dump({"content": processed_str}, f, indent=2)

这个函数会自动把所有非打印的ASCII控制字符、扩展ASCII字符转成\xXX格式,同时保留换行、回车这类常用格式字符。


内容的提问来源于stack exchange,提问作者Sagiv Mapgavker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:19