Python合并多JSON对象时遭遇charmap编码错误求助
解决Python打印Unicode表情时的charmap编码错误
看起来你遇到的问题不是读取文件的编码问题,而是打印输出时的编码冲突——错误提示里的\U0001f60b是一个眨眼笑的emoji表情,而你的Windows控制台默认使用GBK/cp1252这类不支持全Unicode字符的编码,导致无法将这个表情符号编码输出到控制台。
下面给你几个针对性的解决办法:
1. 跳过打印,直接写入合并后的JSON文件(推荐)
如果你的核心需求是合并JSON对象并保存,其实完全不需要打印——直接将加载后的data写入新文件即可,这一步用utf-8编码就不会有问题:
import json with open('name.txt', encoding="utf-8") as fp: data = fp.read() # 注意:如果原始文件是多个独立的JSON数组(比如每行都是[...]\n[...]),替换后需要确保最终是一个合法数组 # 你可以根据实际格式调整,这里先保留你的原有替换逻辑 data = data.replace('\n]\n[', ',') data = json.loads(data) # 写入合并后的JSON文件,保留原始Unicode字符(比如emoji) with open('merged_result.json', 'w', encoding='utf-8') as out_file: json.dump(data, out_file, ensure_ascii=False, indent=2)
ensure_ascii=False参数能让输出的JSON文件直接显示emoji等Unicode字符,而不是转成\uXXXX的转义格式。
2. 修复控制台编码,正常打印emoji
如果确实需要在控制台查看内容,可以强制将标准输出的编码设为utf-8:
import sys import json # 设置控制台输出编码为utf-8 sys.stdout.reconfigure(encoding='utf-8') with open('name.txt', encoding="utf-8") as fp: data = fp.read() data = data.replace('\n]\n[', ',') data = json.loads(data) print(data)
另外,建议使用Windows Terminal替代旧版的cmd,它默认支持utf-8编码,能更好地显示各类Unicode字符。
小提醒:检查JSON格式的合法性
最后提个小细节:如果你的原始文件是多个独立的JSON数组(比如每行都是[...]\n[...]),那么直接替换\n]\n[为逗号后,得到的内容可能不是合法的JSON数组(比如会变成[obj1,[obj2])。这种情况下,你需要调整替换逻辑:
# 假设原始文件每行都是一个独立的JSON数组 with open('name.txt', encoding="utf-8") as fp: lines = [line.strip() for line in fp if line.strip()] # 去掉每个数组的首尾[],然后用逗号连接,再包裹成一个大数组 merged_data = '[' + ','.join(line[1:-1] for line in lines) + ']' data = json.loads(merged_data)
内容的提问来源于stack exchange,提问作者Data_Science_110
相关产品推荐
相关产品推荐

