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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:14:09