Python实现JSON转XLSX并保存为UTF-8编码失败问题
解决JSON转Excel时带重音字符显示乱码的问题
你的问题出在手动使用openpyxl循环写入数据的环节——虽然读取JSON时的编码处理没问题,但手动逐行添加数据的过程中,字符编码的传递逻辑容易出现疏漏,导致带重音的字符(如Á)显示为�。其实完全可以利用pandas内置的to_excel方法,它会自动处理Unicode字符编码,避免乱码问题。
修正后的代码
import json import pandas as pd import os caminho = "C:/Users/Braian/Documents/Área de Trabalho/Braian/VS Code/appAPI/JSON/Cliente" lista_arquivos = os.listdir(caminho) lista_datas = [] for arquivo in lista_arquivos: if ".json" in arquivo: data = os.path.getmtime(f'{caminho}/{arquivo}') lista_datas.append((data, arquivo)) lista_datas.sort(reverse=True) ultimo_arquivo = lista_datas[0] print("\nConvertendo seu arquivo em Json para Xlsx...") # 读取JSON数据并生成DataFrame with open(os.path.join(caminho, ultimo_arquivo[1]), encoding='utf-8-sig') as json_file: data = json.load(json_file) df = pd.DataFrame(data['data']['rows']) # 直接用pandas保存为Excel,自动处理字符编码 nome_arquivo = f"{caminho}/Cliente.xlsx" df.to_excel(nome_arquivo, index=False, engine='openpyxl') print("\nArquivo em Xlsx foi finalizado!")
关键修改点
- 移除了手动创建openpyxl Workbook和循环写入的代码,改用
df.to_excel直接保存DataFrame,简化流程的同时确保编码处理正确 - 添加
index=False避免生成不必要的索引列 - 指定
engine='openpyxl',确保对xlsx格式的Unicode字符处理支持
额外说明
如果你的JSON文件确实是UTF-8编码(带或不带BOM),utf-8-sig的读取方式是正确的。pandas写入Excel时会自动将Unicode字符转换为Excel兼容的格式,不会出现乱码问题。
内容的提问来源于stack exchange,提问作者Braian
相关产品推荐
相关产品推荐

