-o 输出到新文件而不是覆盖原文件TXT 电子书乱码,九成是编码不匹配:文件本身是 GBK/GB18030(Windows 记事本旧版本默认的 ANSI)、UTF-16 或 Big5,却被阅读器、转换工具按 UTF-8 读了。处理顺序只有三步:认出乱码属于哪一类、确认原始编码、转成 UTF-8 保存,最后才做格式转换。顺序反了,会把错乱的字符固化进文件。下面给出四类乱码的对照判断表、三种识别编码的方法、三种修复方案,以及转完仍不正常的排查点。
| 你看到的现象 | 常见成因 | 处理方向 |
|---|---|---|
| 锟斤拷、烫烫烫 | UTF-8 文本被按 GBK 读取,替换字符被再次编码 | 按 UTF-8 重新打开 |
| ä½Â、’、 | UTF-8 被当成 Latin-1(ISO-8859-1)读取 | 按 UTF-8 重新打开 |
| 开头的  | UTF-8 BOM 被当成正文内容 | 另存为「UTF-8 无 BOM」 |
| 通篇是少见字或繁体形 | GBK 与 Big5 互相串读 | 试 GB18030 或 Big5 |
| 方块口口、问号 | 编码已正确,但字体缺字 | 换支持中文的字体 |
记两条经验:乱码里出现锟斤拷、烫烫烫这类固定字符串,基本锁定 UTF-8 与 GBK 互串;出现带重音符号的拉丁字母,则是 UTF-8 被当成单字节编码读。开头多出  属于 BOM 问题,文件本身没坏,另存时去掉 BOM 就好。
VS Code 打开文件后,点右下角的编码按钮,选「通过编码重新打开」(Reopen with Encoding),依次试 UTF-8、GBK、GB18030、Big5,哪一种显示正常,它就是原编码。Notepad++ 在「编码」菜单里选「以编码打开」做同样的事。这个方法最直观,缺点也明显:文件多时要一个一个试。
macOS 与 Linux 上先用 file -I file.txt(部分 Linux 发行版是 file -i)看 charset 字段;再装 uchardet,运行 uchardet file.txt 得到估算结果。这类工具是按字节分布猜的,只能当参考,最终仍以能正常显示为准。
来源就是线索。Windows 记事本旧版本另存的 TXT 多为 GBK(GB2312 的超集),大陆网文站下载的 TXT 同理;港澳台来源、繁体内容常见 Big5;用 Python 脚本或部分下载工具生成的多为 UTF-8;从 Word 或网页「另存为纯文本」有时会带上 BOM。知道来源,试错次数能少一半。
关键顺序别搞反:先用正确编码打开,再以 UTF-8 保存。反过来直接另存,等于把已经错乱的字符盖章认定,之后很难还原。
书多的时候用命令更快。macOS 与 Linux 都自带 iconv,基本格式如下:
iconv -f GBK -t UTF-8 book.txt -o book-utf8.txt
-f 指定原始编码,-t 指定目标编码,-o 指定输出文件。GBK 认不出的生僻字可以换成 GB18030——它是 GBK 的超集,覆盖更全:
iconv -f GB18030 -t UTF-8 book.txt -o book-utf8.txt
要批量处理整个目录,用循环把每本书输出到新目录:
for f in *.txt; do iconv -f GBK -t UTF-8 "$f" -o "utf8/$f"; done
如果报「illegal input sequence」,说明原编码猜错了,或者文件里混了别的字符。这时先换 GB18030 或 Big5 再试,也可以先用 iconv -l 查看工具支持的编码名写法。转码前先备份原始文件,这一步不能省。
不想先转码,也可以在转换环节解决。Calibre 导入或转换时,在「转换书籍 → 界面外观(Look & feel)」的输入字符编码里填 gbk 或 gb18030,让它按正确编码读取,具体位置见Calibre 完整使用教程。在线工具一般会自动猜测编码,但猜错时结果依旧是乱码——稳妥的做法是先按第三节转成 UTF-8,再用TXT 转 EPUB 在线工具上传转换。
还要提醒一句:转成 EPUB 后才发现正文乱码,多半是放进 EPUB 之前就没转好。回到源 TXT 用同一套方法处理再转一次,比在 EPUB 里逐个修补省事得多。
按先识别、再转码、后转换三步处理:用编辑器的「通过编码重新打开」逐个试 UTF-8、GBK、GB18030、Big5,找到显示正常的那一个;再用「通过编码保存」存成 UTF-8;最后把转好的文件交给阅读器或转换工具。顺序反了会把错乱的字符固化下来,后面很难修。
这是 UTF-8 文本被按 GBK 读取的典型结果:文件里无法映射到 GBK 的字节被替换成特定字符,再次转换后就出现「锟斤拷」这类固定组合。处理方向是让工具按 UTF-8 读取原文件;如果文件本身是 GBK,则反过来按 GBK 读取,再另存为 UTF-8。
用命令行最省事。在 macOS 或 Linux 终端进入文件所在目录,单本执行 iconv -f GBK -t UTF-8 book.txt -o book-utf8.txt;批量处理用 for 循环遍历目录里的 txt 文件,逐个输出到新目录。遇到报错先换 GB18030 再试,并且始终提前备份原始文件。
常见三种原因:所选编码与文件实际编码不符;文件里混了两种编码,例如正文是 GBK、章节或广告行是 UTF-8;转换成 EPUB 时嵌入的其实是转码前就已损坏的文本。处理办法是回到源 TXT,用编辑器确认显示正常、另存为 UTF-8,再重新转换一次。
先看乱码范围:整篇都乱,说明源文件编码没转对,重新转码后再转格式;只有个别字显示方块,是阅读器字体缺字,换支持中文的字体即可;段落全挤在一起,则是换行符问题,要先把单换行整理成段落分隔再转。排查顺序从源文件开始,别在 EPUB 里直接修补。
乱码不是文件坏了,而是编码对不上号。认准症状、试出编码、存成 UTF-8,这三步做完,绝大多数 TXT 电子书都能恢复可读,再转 EPUB、MOBI 或推送 Kindle 都不会再出问题。遇到整篇乱码先别急着删文件,正文往往原样还在,只是被读错了编码。
*更新于 2026-09-13 | 电子书格式知识整理 | 命令示例请先在小文件上验证后再批量执行,并保留原始文件备份;编辑器与工具界面措辞可能随版本略有差异,仅供参考。*