如何批量将ANSI编码的CSV文件转换为UTF-8编码
批量ANSI编码CSV转UTF-8操作方法
针对你列出的7个ANSI编码CSV文件,提供两种可直接落地的操作方案:
方案1:Windows PowerShell 无额外依赖方案
不需要安装任何软件,适合Windows系统用户:
- 将所有待转换CSV放到同一个独立文件夹中,按住Shift键在文件夹空白处右键,选择「在此处打开PowerShell窗口」
- 执行以下命令,脚本会自动备份原文件为
.bak后缀,再完成转码输出UTF-8无BOM格式文件:
Get-ChildItem -Filter *.csv | ForEach-Object { Copy-Item $_.FullName "$($_.FullName).bak" $content = Get-Content $_.FullName -Encoding Default Set-Content $_.FullName -Value $content -Encoding UTF8 }
简体中文Windows系统下Default编码即对应文件存储用的ANSI(GBK)编码,转码不会出现乱码。确认转码后文件内容正常,即可删除所有.bak备份文件。如果需要适配旧版Excel识别UTF-8,把命令里的UTF8替换为UTF8BOM即可。
方案2:Python跨平台方案
Windows/macOS/Linux系统通用,适合已安装Python3环境的用户:
- 将以下脚本保存为
convert.py,放到CSV文件所在目录运行即可,脚本会自动备份原文件再执行转码:
import os target_files = [ "2022-01-07.csv", "2022-01-11.csv", "2022-01-14.csv", "2022-01-21.csv", "2022-02-08.csv", "2022-02-17.csv", "2022-02-21.csv" ] for file in target_files: if not os.path.isfile(file): print(f"跳过不存在的文件:{file}") continue # 备份原文件 with open(file, "rb") as f: raw = f.read() with open(f"{file}.bak", "wb") as f: f.write(raw) # 转码写入,遇生僻字可将gbk替换为gb18030 try: text = raw.decode("gbk") with open(file, "w", encoding="utf-8") as f: f.write(text) print(f"转换完成:{file}") except Exception as e: print(f"{file}转换失败:{str(e)},原文件已备份未损坏")
如果需要输出带BOM的UTF-8格式,把写入时的encoding参数从utf-8改为utf-8-sig即可。
转码注意事项
- 不要跳过备份步骤,避免编码识别偏差导致文件内容损坏
- 转码完成后随机打开2-3个文件抽查,确认中文、数字、特殊符号均无乱码再清理备份
- 不要用系统自带记事本直接另存为批量操作,容易出现格式错乱、引号转义错误的问题
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

