iconv是最可靠可控的编码修改方式,但必须先用enca -l zh精准识别原始编码(如chinese gb18030或utf-8),不可依赖file -i或vim的:set fileencoding;-f参数须严格匹配enca输出,否则转换失败或乱码。

iconv 是最可靠、最可控的修改方式,但必须先准确识别原始编码——盲目写 GBK 却实际是 GB18030,或把 UTF-8 当 ISO-8859-1 转,结果只会更乱。
用 enca -L zh 精准识别中文文件原始编码
别信 file -i 返回的 charset=unknown-8bit,它对中文几乎没用;也别靠 :set fileencoding 在 vim 里猜,那是 vim 当前“认为”的编码,不是文件真实编码。
-
enca是专为中文/日文/韩文设计的检测工具,识别率远高于file;没装就先跑sudo apt install enca(Ubuntu/Debian)或sudo yum install enca(CentOS/RHEL) - 必须加
-L zh,否则默认按西欧语言分析,常把 GBK 误判成iso-8859-1 - 输出如
Universal transformation format 8 bits; UTF-8或Chinese National Standard; GB18030才算可信结果;若报Unrecognized encoding,说明文件可能混码或损坏,得手动试
用 iconv -f xxx -t UTF-8 安全转换内容编码
iconv 不自动猜源编码,-f 写错就直接失败或输出乱码,不是“转得不对”,而是根本没转对。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-f参数必须严格匹配enca输出的编码名,比如GB18030≠GBK,cp936≈GBK但不等价 - 先小范围验证:
iconv -f GB18030 -t UTF-8 input.txt | head -n 10看前 10 行是否可读,再全量转 - 加
--verbose可看到哪些字节被跳过:iconv -f GBK -t UTF-8 --verbose input.txt > output.txt 2>&1 | head -n 5 - 遇到
Invalid or incomplete multibyte or wide character错误,99% 是-f指定错误,别急着加//ignore——那会静默丢数据
用 convmv -f gbk -t utf-8 修复中文文件名乱码
Windows 拷过来的 测试.txt 在 Linux 终端显示成 ?????.txt,这不是文件内容问题,iconv 对它完全无效——它只动文件内容,不动文件名。
-
convmv专治文件名编码错位,先预览:convmv -f GBK -t UTF-8 *.txt(不加--notest就只是打印要改什么) - 真正执行加
--notest:convmv -f GBK -t UTF-8 --notest *.txt - 如果提示
No such file or directory,说明当前 shell 的 locale 不支持目标编码,先运行export LANG=zh_CN.UTF-8再试 -
convmv默认不递归,处理目录需配合find:find ./dir -type f -name "*.log" -exec convmv -f GBK -t UTF-8 --notest {} \;
vim 中临时查看或保存为 UTF-8,不改原文件
有时你只想快速看懂一个乱码文件,不想动它。vim 支持运行时重载编码,但设置顺序很关键。
- 打开文件后,用
:e ++enc=gbk %强制以 GBK 解析当前缓冲区;:e ++enc=utf-8 %切回 UTF-8 - 想永久提升自动识别率,在
~/.vimrc加这行:set fileencodings=ucs-bom,utf-8,gb18030,gbk,cp936 -
ucs-bom必须放第一位:带 BOM 的 UTF-8 文件若被后面规则先匹配,可能被截断成乱码 - 确认显示正常后,再
:set fileencoding=utf-8+:wq保存——此时 vim 才真正以 UTF-8 编码写入磁盘
enca 输出的编码名,就是 iconv -f 唯一可信的输入来源——其他都是猜测,猜错就不可逆。**










