需先用file -i或enca确认源编码,再用iconv批量转UTF-8:单文件用iconv -f GBK -t UTF-8原文件>新文件,批量用for循环或find命令,含空格文件名须加双引号,操作前务必备份。

当你从Windows或旧中文系统下载了一堆GBK编码的.txt、.html、.py文件,在Mac上用“文本编辑”或VS Code打开全是乱码,又不想一个个手动改,就得用终端命令批量转换编码格式。
先确认原始编码类型
盲目填错源编码会导致输出全是乱码,且无法恢复。这一步不能跳过。
打开终端,用cd进入目标文件所在目录,例如:cd ~/Downloads/乱码文件。
任选一个典型文件执行:file -i 文件名.txt,查看返回结果中的charset=字段,常见值有gbk、gb18030、iso-8859-1或utf-8。
如果返回显示charset=unknown-8bit或结果模糊,就用enca -L zh_CN 文件名.txt二次验证(需先brew install enca)。
单个文件快速转UTF-8
方法一:基础iconv命令
执行:iconv -f GBK -t UTF-8 原文件.txt > 新文件.txt。注意-f参数必须与上一步确认的源编码严格一致,大小写敏感,空格不能多。
方法二:带容错的转换(推荐处理老旧文档)
加-c参数可跳过无法转换的字节:iconv -f GB18030 -t UTF-8 -c 原文件.txt > 新文件.txt。不加-c时遇到非法字节会直接报错中断,加了则静默丢弃,避免整批失败。
批量转换当前目录所有.txt文件
第一步:新建输出文件夹防止覆盖原文件:mkdir -p utf8_out。
第二步:执行for循环批量处理:for f in *.txt; do iconv -f GB18030 -t UTF-8 "$f" > "utf8_out/$f"; done。
第三步:检查结果是否正常:head -n 3 utf8_out/*.txt,确认中文显示无方块、无问号。
⚠️注意:如果原文件名含空格或中文,"$f"的双引号必不可少,否则命令在空格处截断导致报错。
递归转换整个项目目录下的所有代码文件
方法1:用find+sh -c(兼容性最强)
find ./ -name "*.py" -exec sh -c 'iconv -f GBK -t UTF-8 "$1" > "$1".utf8' _ {} \;。
方法2:一步到位重命名替换原文件(操作前请确保已备份)
find ./ -name "*.java" -exec iconv -f GB2312 -t UTF-8 {} \; -exec mv {} {}.bak \; -exec mv {}.utf8 {} \;。
【此操作不可逆,未备份直接覆盖原文件将丢失原始编码内容】
方法3:用enconv自动识别并转(适合混合编码的未知文件集)
先安装:brew install enca;再执行:enconv -L zh_CN -x UTF-8 *.md *.txt。它会自动探测每个文件真实编码,再统一转为UTF-8,省去人工判断环节。


















