如何使用Python将CSV文件编码从UTF-8转换为Shift-JIS
可行性说明
该需求完全可实现,Python标准库自带的编码处理、CSV读写模块就能完成整个转换流程,无需安装额外第三方依赖。
实现方案
前置注意事项
- 不建议直接以二进制模式读取文件后粗暴转码写入,这种方式会破坏CSV内带引号、内嵌换行的字段结构,大概率导致文件格式损坏
- 标准Shift-JIS编码的字符覆盖范围有限,部分emoji、罕见汉字、特殊符号没有对应编码,需要提前配置错误处理规则避免程序中断
- 如果转码后文件在日系软件(比如日本区Excel)中打开仍有乱码,可以尝试将编码替换为
cp932(微软扩展版Shift-JIS,字符兼容性更强)
基础实现代码(无特殊字符场景)
这个版本适合源文件内所有字符都在Shift-JIS编码覆盖范围内的场景,逐行读写内存占用极低,支持GB级大文件转换:
import csv # 替换为你的实际文件路径 source_path = "utf8编码源文件.csv" target_path = "shiftjis编码目标文件.csv" # 以UTF-8编码读取源文件 with open(source_path, "r", encoding="utf-8", newline="") as f_in: reader = csv.reader(f_in) # 以Shift-JIS编码写入目标文件 with open(target_path, "w", encoding="shift_jis", newline="") as f_out: writer = csv.writer(f_out) for row in reader: writer.writerow(row)
兼容特殊字符的容错版本
如果运行代码时抛出UnicodeEncodeError,说明源文件包含Shift-JIS无法识别的字符,可以在写入文件时配置错误处理规则,按需选择以下任意一种错误处理策略替换原有open参数:
encoding="shift_jis", errors="replace":无法编码的字符统一替换为?encoding="shift_jis", errors="ignore":直接跳过无法编码的字符,不写入目标文件encoding="shift_jis", errors="backslashreplace":将无法编码的字符转为Python转义字符串留存,方便后续排查
注意:读写CSV时必须传入
newline=""参数,这是Python csv模块的官方要求,否则生成的文件会出现多余空行。
内容的提问来源于stack exchange,提问作者Gouri Mahapatra
相关产品推荐
相关产品推荐

