首页/系统/信创系统运维速查/编码转换:GBK 与 UTF-8 互转
迁移适配65 条

编码转换:GBK 与 UTF-8 互转

迁移常遇到 GBK 文本与文件名:iconv 转内容、convmv 转文件名;转换前备份并抽样校验,避免不可逆乱码。

信创系统运维速查系统更新于 2026-10-13

编码转换要解决什么

从老系统迁移过来的文本文件、脚本与文件名,很多是 GBK 编码;目标平台与业务系统普遍按 UTF-8 处理。编码不一致的表现是中文显示为乱码、检索匹配不到、程序读文件报解码错误。iconv 负责转换文件内容,文件名本身的编码要另用工具处理。

为什么分两步做

文件内容与文件名的编码是两套东西:Linux 的文件名只是字节序列,内容编码变了不代表文件名会跟着变,反之亦然。只处理其中一项,最常见的残留现象是内容正常了但目录列表仍是乱码,或文件名正常了但打开仍是乱码。

基本信息

内容转换iconv,指定源与目标编码
文件名转换convmv,默认演练模式需加参数才真正改名
常用检测file -i 查看文件编码
安全做法转换前备份,转换后抽样比对

典型使用场景

  • 存量文档与配置文件从 GBK 批量转为 UTF-8
  • 迁移后中文文件名在老系统侧显示正常、新系统侧乱码
  • 应用读取配置文件报解码错误,需要统一文件编码
  • 批量导出数据文件交付前统一编码,避免对接方解析失败
  • 脚本注释与提示信息含中文,迁移后出现乱码需要修复

文件内容转换

文件内容转换
file -i old.txt                                # 先确认识别出的编码
iconv -f GBK -t UTF-8 old.txt -o new.txt       # 单个文件转换,输出到新文件
iconv -f GBK -t UTF-8 old.txt > new.txt        # 也可用重定向
iconv -l | head -20                            # 查看支持的编码名称
# 批量处理并存放到独立目录,保留原始文件用于回退

文件名转换

文件名转换
dnf install -y convmv
mkdir -p /tmp/enc && cd /tmp/enc
convmv -f GBK -t UTF-8 *                      # 演练模式,只打印改名计划
convmv -f GBK -t UTF-8 * --notest             # 确认无误后真正改名
convmv -f GBK -t UTF-8 -r /data/docs --notest # 递归处理目录树

现象与对策

现象可能原因对策
中文全是问号目标编码不支持该字符确认字符集并改用支持中文的目标编码
转换报非法序列源编码判断错误或文件本身混杂先用检测工具确认,必要时分段转换
内容正常文件名乱码只转了内容没转文件名用文件名转换工具处理
文件名正常内容乱码只改了名字没转内容对文件内容单独转换
部分文件转换后为空编码名写错或文件被截断核对编码名并保留原始文件重试
转换前先备份并按目录抽样比对:转换是有损操作,编码判断错误时原文会被写成乱码且不可逆。批量任务建议先把输出目录与源目录分开,确认无误后再替换。

易错点

  • 文件名与内容编码可能不同,只处理一类会导致问题残留,两类要分开转并分别验证
  • 编码名写错时 iconv 可能直接失败或产生空文件,先在小样本上验证再批量执行
  • 不做备份就原地转换,一旦方向判断错误原文不可逆恢复
  • 批量转换后只看总量不看抽样,个别文件因混合编码转换失败却混在结果里未被发现

数据来源与参考

  • man 1 iconv
  • man 1 convmv
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌