Python处理CSV文件特殊字符乱码 正确转换编码格式方案
编码乱码修复方案
问题现象
CSV文件中存储的德文字符串出现乱码,错误字符串示例:
string = 'übung Überprüfung'
目标转换结果:
'übung Überprüfung'
当前使用cp1252转码的代码运行后首字符出现替换符�,输出为�bung Überprüfung,无法得到正确结果。
错误原因
这类乱码是典型的UTF-8字节流被错误按单字节编码解码导致的。之前的转码逻辑用cp1252做编码转换存在缺陷:cp1252字符集没有覆盖0x80-0x9F区间的所有单字节映射,部分字节在encode阶段就会被替换为无效字符,后续再解码也无法恢复。
你遇到的首字符丢失问题,就是因为ü的UTF-8编码首字节在cp1252中无对应字符,提前被替换成了�,原始字节信息已经丢失。
可行解决方法
- 源头修复(优先选择,无字符丢失风险)
乱码的根源是读取CSV时用了错误的默认编码,直接在读取文件时指定正确编码即可彻底解决问题:import csv # 普通UTF-8编码CSV用这个 with open('你的文件路径.csv', 'r', encoding='utf-8') as f: csv_data = list(csv.reader(f)) # 如果是Windows导出带BOM头的UTF-8文件,换成encoding='utf-8-sig' - 已损坏字符串修复(适用于无法重新读取源文件的场景)
转码时不要用cp1252,换成latin-1(ISO-8859-1)编码做中间转换——latin-1是完整覆盖0-255所有单字节的编码,不会在encode阶段丢失字节信息:string = 'übung Überprüfung' fixed_str = string.encode('latin-1').decode('utf-8') print(fixed_str) # 输出结果:übung Überprüfung注意:如果你的字符串里已经出现了
�字符,说明对应位置的原始字节在之前的读取环节已经被丢弃,没有办法通过转码恢复,必须回到文件读取环节修改编码配置。
内容的提问来源于stack exchange,提问作者bunbun
相关产品推荐
相关产品推荐

