首页/系统/Linux 运维命令速查/iconv 字符编码转换
文本处理77 条

iconv 字符编码转换

Linux 上转码的标准工具:-f 源编码、-t 目标编码,GBK/GB18030 老系统文件转 UTF-8 的常用选择;-l 可列出全部支持的编码。

Linux 运维命令速查系统更新于 2026-10-13

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 与 GB2312GBK 是 GB2312 的超集老数据多标 GB2312,用 GBK 或 GB18030 更包容
GB18030覆盖全部 Unicode 映射的超集来源不确定的中文数据优先用它做源编码
ISO-8859-1单字节编码,任何字节都能解析当兜底会得到看似成功但实际错误的映射
输出文件与输入文件同名时绝不能写 iconv ... file > file:重定向在命令执行前就把文件截断,源数据会被清空且无法恢复。请使用 -o 指定新文件,确认无误后再替换。
-c 会静默丢弃无法转换的字符,转换后内容是完整的但可能已经缺字。数据敏感场景应转出新文件并比对行数与关键字段,再决定是否替换原件。

易错点

  • 用重定向写回源文件导致源数据被清空,这是最典型的数据丢失方式
  • 编码名称写错或平台别名不同,命令直接报无效编码,需要 iconv -l 查准确名称
  • 依赖 -c 静默丢弃字符,转换后内容缺字却难以察觉
  • 把 ISO-8859-1 当万能兜底,转出内容看似正常但中文实际是错误映射

数据来源与参考

  • man 1 iconv(GNU C Library 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌