导出含德语特殊字符的字典列表至CSV文件时出现编码乱码问题
看起来你遇到的核心问题是字符编码在读写环节的一致性缺失,加上错误处理参数导致了字符被强制替换。我帮你拆解问题并给出具体解决方案:
首先明确几个关键前提:德语的特殊字符(ä、ö、ü、ß等)本身属于ISO-8859-1(Latin-1)编码的覆盖范围,理论上用该编码读写是完全可行的;Python内部所有字符串都是以Unicode格式存储的,所以问题大概率出在「源数据读取时的编码错误」或「CSV写入时的错误处理设置」上。
第一步:确保源数据读取正确
你用ISO-8859-1编码保存了JSON文件,那读取JSON时必须使用完全相同的编码,否则加载到Python中的字符串本身就会乱码,后续导出CSV自然无法正常显示。
正确的JSON读取代码应该是这样:
import json with open('test.json', 'r', encoding='ISO-8859-1') as f: mainList = json.load(f)
如果之前读取时用了默认的utf-8或其他编码,字符串已经损坏,后续再怎么处理都无法恢复正确的字符。
第二步:修正CSV导出代码
你的CSV导出代码里加了errors='replace'参数,这个设置的作用是:当遇到无法用指定编码(此处为ISO-8859-1)编码的字符时,自动用�替换。但德语字符本来是可以用ISO-8859-1编码的,这个参数反而会把原本可能只是读取环节出问题的字符直接替换掉,掩盖了真实问题。
去掉该参数后的CSV导出代码:
import csv csv_file = "data.csv" # 移除errors='replace',确保符合编码要求的字符能正常写入 with open(csv_file, mode="w", newline="", encoding='ISO-8859-1') as file: writer = csv.DictWriter(file, fieldnames=mainList[0].keys()) writer.writeheader() for row in mainList: writer.writerow(row)
第三步:验证CSV文件的打开方式
有时候不是文件本身乱码,而是你打开CSV的编辑器用了错误的编码解析。比如Windows记事本默认可能用GBK或utf-8打开,这时候也会显示乱码。
建议用支持编码选择的编辑器(比如Notepad++、VS Code)打开CSV文件,手动选择「ISO-8859-1」编码,查看字符是否正常显示。
额外排查点
如果按上述步骤操作后仍有问题,可以先在导出前检查mainList里的字符串本身是否正确:比如打印row中的德语字符(print(row['your_key'])),如果Python控制台显示的就是乱码,那说明源数据读取环节肯定有问题,回到第一步重新检查JSON读取的编码设置。
备注:内容来源于stack exchange,提问作者lokp

