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

生成含\uXXXX格式Unicode转义序列的JSON时遇unicodeescape错误求助

解决JSON保存为\uXXXX格式的问题

问题原因

你手动用f-string拼接\u{...}的写法会触发Python的Unicode转义解析错误——Python在解析字符串时会把\u识别为Unicode转义的起始,但此时后面的内容还未被f-string替换,导致解析器判定这是一个不完整的转义序列。

解决方案

方法1:直接使用Unicode字符,让json模块自动转义

Python的json模块默认开启ensure_ascii=True,会自动将非ASCII字符转义为\uXXXX格式,这是最简洁可靠的方式:

import json

# 用chr()生成对应Unicode字符
bp = {
    "type": "bitmap",
    "file": "file",
    "chars": [chr(57392)]
}

# 注意:dir是Python内置函数,不要用作变量名,替换为自定义名称
output_path = "output.json"
with open(output_path, 'w', encoding='utf-8') as f:
    json.dump(bp, f, indent=4)

执行后生成的JSON内容完全符合你的期望:

{
    "type": "bitmap",
    "file": "file",
    "chars": [
        "\uE030"
    ]
}

方法2:手动构造带转义的字符串(不推荐)

如果你一定要手动拼接\uXXXX格式的字符串,需要用双反斜杠让Python将\视为普通字符,同时关闭json模块的自动转义(ensure_ascii=False),否则会把\再次转义成\\:

import json

bp = {
    "type": "bitmap",
    "file": "file",
    "chars": [f"\\u{hex(57392)[2:].upper()}"]
}

output_path = "output.json"
with open(output_path, 'w', encoding='utf-8') as f:
    json.dump(bp, f, indent=4, ensure_ascii=False)

这种方法也能得到目标JSON,但相比方法1更繁琐,且容易因转义逻辑出错。

注意事项

  • 避免使用dir作为变量名,它是Python内置函数,会覆盖原有功能导致异常。
  • 打开文件时指定encoding='utf-8',避免跨环境编码问题。

内容的提问来源于stack exchange,提问作者Julian Olalde Apaseo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:54