如何在Python字典中存储特殊字符?解决Unicode编码报错问题
解决Python字典存Unicode字符时的UnicodeEncodeError问题
问题根源
这个错误大多出现在把带特殊Unicode字符的内容输出到控制台或写入文件时——Python默认用了系统本地编码(比如Windows下的cp1252或gbk),这些编码覆盖不了所有Unicode字符,自然就编码失败了。
具体解决办法
1. 写入文件时指定UTF-8编码
要是你是把JSON数据写进文件,务必在open()里明确指定encoding='utf-8',还可以加个errors='backslashreplace'兜底(可选,碰到实在编码不了的字符就用转义符代替,避免程序崩掉):
import json # 示例含特殊Unicode字符的字典 unicode_dict = {"special_char": "𝄞😀𠀋"} # 指定UTF-8编码写入 with open("output.json", "w", encoding="utf-8") as f: json.dump(unicode_dict, f, ensure_ascii=False, indent=2)
ensure_ascii=False:让JSON保留原始Unicode字符,不用转成\uXXXX格式;如果需要转义后再比对,把这个参数设为True就行,按需调整。
2. 控制台输出时强制用UTF-8编码
如果是打印到控制台时出错,直接改标准输出的编码为UTF-8:
import sys import json unicode_dict = {"special_char": "𝄞😀𠀋"} # 重置标准输出编码 sys.stdout.reconfigure(encoding='utf-8') print(json.dumps(unicode_dict, ensure_ascii=False))
或者手动编码后再输出:
print(json.dumps(unicode_dict, ensure_ascii=False).encode('utf-8').decode('utf-8'))
3. JSON转义与比对的注意点
- 要比对转义后的JSON字符串?确保两边转义规则一致:
json.dumps()默认ensure_ascii=True,会把所有非ASCII字符转成\uXXXX格式,这时比对转义后的字符串,不会有编码问题。 - 其实Python字典本身完全支持存Unicode字符,问题基本都出在输出或者持久化环节,不是字典存储的问题。
验证方式
跑修改后的代码,看看输出文件或控制台能不能正常显示Unicode字符,同时确认不再抛出UnicodeEncodeError就行。
内容的提问来源于stack exchange,提问作者anh phan
相关产品推荐
相关产品推荐

