生成含\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
相关产品推荐
相关产品推荐

