iconv - 转换文本文件编码
iconv 从一种字符编码读取文本,并转换为另一种编码。没有指定输入文件时从标准输入读取,没有指定输出文件时写到标准输出。
基本语法
iconv [OPTIONS] -f FROM_ENCODING -t TO_ENCODING [INPUTFILE...]常用参数
-f ENCODING、--from-code=ENCODING:指定输入编码。-t ENCODING、--to-code=ENCODING:指定输出编码。-l、--list:列出支持的编码名称。-o FILE、--output=FILE:指定输出文件。-c:丢弃无法转换的字符。--verbose:处理多个文件时显示进度。
安全转换
始终写入不同的输出文件,不要同时把同一个路径作为输入和输出:
iconv -f UTF-8 -t GB18030 input.txt -o output.txt转换后先检查退出状态和内容:
iconv -f GB18030 -t UTF-8 input.txt -o output.utf8.txt
file output.utf8.txt确认结果完整、文本正常后,再由人工决定是否替换原文件。原文件应保留备份。
处理无法转换的字符
遇到无法表示的字符时,iconv 默认报错并返回非零状态:
iconv: illegal input sequence at position ...-c 会直接丢弃无法转换的字符:
iconv -c -f UTF-8 -t GB18030 input.txt -o output.txt使用 -c 可能造成静默数据丢失,不适合需要完整保留内容的文档、配置、日志和数据文件。应优先确认源编码是否判断正确。
部分实现支持目标编码后缀:
iconv -f UTF-8 -t 'ASCII//TRANSLIT' input.txt -o output.txt//TRANSLIT 会尽可能使用近似字符,但结果依赖具体实现和字符集。
批量转换建议
- 先对文件副本进行小范围验证。
- 正确引用文件名,避免使用
for file in `ls`。 - 每个文件写入独立临时输出,成功后再替换。
- 转换前后记录文件数量,并对重要文件保留校验值或版本控制记录。