CSV编码识别方法:Python读取ISO2022编码CSV乱码解决
乱码根因
你现在跑出来的带\x1b转义符的乱码,核心问题就是打开文件的时候没指定对应的解码规则。Python默认会拿当前运行环境的编码(比如Windows下默认GBK、多数Linux环境默认UTF-8)硬解ISO2022格式的日文字节,碰到编码里自带的ESC控制序列时,没法把整段编码串映射成正确的日文,只能把原始控制符原样打印出来,自然就成了现在看到的乱码状态。
修复操作
- 对应到Python的编码标识
你文件里带\x1b$B转义的日文版ISO2022格式,Python本身就内置了支持,对应的编码名是iso2022_jp,不需要额外安装任何第三方库。 - 修改
open()方法的调用逻辑
不需要改动csv模块的处理流程,只要在打开文件的代码里补上encoding参数,指定和文件匹配的解码规则就行:
import csv # 显式声明文件编码,覆盖Python的默认解码逻辑 with open('vocabulary.csv', 'r', encoding='iso2022_jp') as csv_file: csv_reader = csv.reader(csv_file) for line in csv_reader: print(line)
- 效果验证
运行修改后的代码,原来的乱码片段比如'\x1b$B0l$D\x1b(B'会被正确解码为'私'、'\x1b$B$R$H$D\x1b(B'解码为'名前',输出内容和参考截图的可读日文完全一致。
避坑提示
- 别选相近但不匹配的日文编码:日常见的
shift_jis、euc_jp虽然也是日文常用编码,但本身不带\x1b开头的ESC转义控制符,和你当前的文件格式不匹配,选错了还是会出乱码。 - 别依赖系统默认编码做文件读取:哪怕你当前机器的默认编码刚好能正常打开文件,换个运行环境大概率就会复现乱码,显式传入
encoding参数是最稳妥的写法。 - 如果用
iso2022_jp读取时碰到个别字符解码报错,可以换同系列的细分编码iso2022_jp_2尝试,部分带全角标点的ISO2022格式CSV文件会用到这个编码变体。
内容的提问来源于stack exchange,提问作者Borntolol
相关产品推荐
相关产品推荐

