iconv 是什么
iconv 在字符编码之间做转换:-f 指定源编码、-t 指定目标编码,缺省从标准输入读取并写到标准输出,也可用 -o 直接写文件。最常见的用途是把老系统导出的 GBK 或 GB18030 文本转成 UTF-8,或者反向生成为 Windows 工具准备的 GBK 文件。它由 glibc 提供实现,绝大多数 Linux 自带。使用中最大的障碍是编码名称的平台差异:同一编码可能有 UTF8 与 UTF-8、GBK 与 GB2312 等写法,名称不被识别时命令会直接报无效编码而不是猜一个近似值。
基本信息
| 适用平台 | Linux(glibc 自带 iconv 命令与库);Windows 可用移植版或 PowerShell 的编码参数 |
|---|---|
| 命令语法 | iconv -f 源编码 -t 目标编码 [-o 输出文件] [输入文件] |
| 常用选项 | -f 源编码 -t 目标编码 -o 输出文件 -c 丢弃无法转换的字符 -l 列出全部支持的编码 |
| 配套工具 | file -i 探测文件编码、iconv -l 查编码名、dos2unix 只处理换行 |
| 权限说明 | 普通用户即可,取决于输入输出文件的读写权限 |
典型使用场景
- 数据迁移:把遗留系统导出的 GBK 数据统一转成 UTF-8 后再入库
- 对外交付:把 UTF-8 报表转成 GBK,供只认本地编码的 Windows 工具打开
- 乱码修复:确认源编码后用 iconv 重新转码,比逐条手工改字可靠
- 编码普查:配合 file -i 批量检查目录里文件的编码分布
- 脚本兼容:为同一份数据生成多种编码副本,避免下游工具报错
常用示例
常用示例
file -i legacy.txt # 先探测编码
iconv -f GB18030 -t UTF-8 legacy.txt -o legacy.utf8.txt
iconv -f GBK -t UTF-8 -c data.csv > data.utf8.csv # -c 跳过非法字节
iconv -f UTF-8 -t GBK report.csv -o report.gbk.csv
iconv -l | grep -i -E 'gbk|utf-8' # 查支持的编码名
wc -l legacy.txt legacy.utf8.txt # 转换后比对行数常见编码名对照
| 写法 | 说明 | 注意 |
|---|---|---|
| UTF-8 与 UTF8 | 同一编码的两种别名 | 报无效编码时先换另一种写法试 |
| GBK 与 GB2312 | GBK 是 GB2312 的超集 | 老数据多标 GB2312,用 GBK 或 GB18030 更包容 |
| GB18030 | 覆盖全部 Unicode 映射的超集 | 来源不确定的中文数据优先用它做源编码 |
| ISO-8859-1 | 单字节编码,任何字节都能解析 | 当兜底会得到看似成功但实际错误的映射 |
输出文件与输入文件同名时绝不能写 iconv ... file > file:重定向在命令执行前就把文件截断,源数据会被清空且无法恢复。请使用 -o 指定新文件,确认无误后再替换。
-c 会静默丢弃无法转换的字符,转换后内容是完整的但可能已经缺字。数据敏感场景应转出新文件并比对行数与关键字段,再决定是否替换原件。