如何通过Linux Shell将ANSI编码CSV文件转换为无重音编码格式
操作方案
你可以直接使用Linux自带的iconv工具完成转换,无需额外编程语言,操作步骤如下:
第一步:先确认原始文件编码
你提到的ANSI在拉丁语系Windows环境下通常为Windows-1252,少数场景为ISO-8859-1,可执行以下命令初步判断编码:file -i 待检测文件名.csv第二步:单文件转换
使用iconv的音译模式可自动将带重音的字符转换为对应无重音的ASCII字符,命令格式如下:iconv -f 原编码 -t ASCII//TRANSLIT//IGNORE 输入文件.csv > 输出文件.csv
参数说明://TRANSLIT:开启音译模式,自动将非ASCII字符转换为最接近的ASCII等价字符(如ã→a、ç→c、á→a、í→i)//IGNORE:遇到无法转换的字符时直接丢弃,避免命令执行中断
示例(原编码为Windows-1252时):iconv -f WINDOWS-1252 -t ASCII//TRANSLIT//IGNORE input.csv > output.csv
第三步:批量处理当前目录所有CSV文件
如果需要一次性转换所有CSV,可执行以下命令,转换后的文件会自动存入新建的output目录:
# 先创建存储转换后文件的目录 mkdir -p output # 遍历所有csv文件执行转换 for csv_file in *.csv; do iconv -f WINDOWS-1252 -t ASCII//TRANSLIT//IGNORE "$csv_file" > "output/$csv_file" done
可选更精准的重音移除方案
如果iconv的音译效果不符合预期,可使用ICU工具集的uconv直接剥离所有重音标记,转换精度更高:
- 先安装依赖工具:
- Debian/Ubuntu系:
apt install icu-devtools - RHEL/CentOS/Fedora系:
yum install icu
- 单文件转换命令:
uconv -f WINDOWS-1252 -t ASCII -x '::nfd; [:Nonspacing Mark:] > ; ::NFC;' input.csv > output.csv - 批量转换只需把循环中的
iconv命令替换为上述uconv命令即可。
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

