「EPUB 打不开」是一类症状,不是一个原因。同一个文件在 A 阅读器打不开、B 阅读器能开——这本身就说明它没坏。
下面六层从最外面往里排,每一层都有不用装任何软件就能做的判断。
第一步:它到底是不是 EPUB
把扩展名改成 .zip,试着解压。 这一步能筛掉一大半问题,因为 EPUB 的本质就是一个 ZIP 包。
| 解压结果 | 说明 | 下一步 |
|---|---|---|
正常解压,里面有 mimetype、META-INF/、一堆 xhtml | 文件本体没问题 | 跳到第三步 |
| 报「不是压缩文件」「文件头损坏」 | 它根本不是 ZIP | 第二步 |
| 能解压,但里面是 PDF / TXT / 图片 | 只是扩展名被改了 | 改回真实扩展名直接打开 |
扩展名伪装比想象中常见:资源站为统一分类把所有格式标成 .epub、从聊天工具转存时被自动改名、转换工具失败后仍写出了一个空壳。
判断真实格式还有个土办法:用文本编辑器打开看开头几个字节——ZIP 开头是 PK,PDF 开头是 %PDF,都是可见字符。
第二步:下载是不是不完整
典型迹象:
- 文件大小明显异常——一本长篇小说只有几十 KB
- 解压时前面几个文件正常出来,到某一个突然报错(典型的截断)
- 阅读器能认出书名和封面,但翻到某章之后卡住
重新下载是唯一可靠的解法。 不要试图修复截断的 ZIP——后半段数据是真的不存在,任何修复工具只能把损坏的部分丢掉。
如果只丢了尾部少量章节,可以把能解出来的内容拿出来重新打包,救回大部分正文,但目录和结尾会残缺。
第三步:三个必需文件
解压成功但阅读器仍不认,按顺序看这三个:
| 文件 | 作用 | 缺失/损坏的表现 |
|---|---|---|
mimetype | 固定一行 application/epub+zip,必须在包最前面且不能被压缩 | 严格的阅读器直接拒绝 |
META-INF/container.xml | 告诉阅读器 OPF 文件在哪 | 「无法识别的格式」 |
| OPF 文件 | 全书清单:文件列表、阅读顺序(spine)、元数据 | 能打开但内容残缺 |
最常见的实际原因:有人解压 EPUB 改了点东西,然后用右键「压缩」重新打包。这样打出来的包,mimetype 的位置和压缩方式都不对——一大半阅读器不认。
正确的重新打包方式是:mimetype 必须第一个加入,且以**存储方式(不压缩)**写入。这个约束是 EPUB 规范特意设计的,为的是让程序只读前几十个字节就能识别文件类型。
所以对普通用户来说,结论很实际:不要手工解压再压回去。需要改内容就用专门的工具,或者干脆重新生成。
第四步:排除 DRM
三个识别特征,命中任意一个就是 DRM:
- 解压后出现
META-INF/encryption.xml或rights.xml - 正文的 xhtml 解压出来是二进制乱码,不是可读 HTML
- 阅读器明确提示「需要授权」「此内容受保护」
DRM 不是损坏。解密密钥绑定在你的账号和设备授权上,不在文件里,所以浏览器端的任何工具都拿不到——这是原理上的不可能,不是功能没做。
正确做法只有一条:用购买渠道的官方阅读器打开,换设备用官方同步机制。图书馆借阅的电子书带 DRM 且有借期,到期失效是正常行为。想要能长期保存、随意转换的副本,买无 DRM 的版本。
网上流传的各种「解密工具」大多要么失效、要么携带风险,且绕过技术保护措施本身存在法律风险——不值得。Kindle 侧的 DRM 细节见Kindle 书搬家到 EPUB。
第五步:乱码和方块不是损坏
能打开但显示不对,文字数据本身是好的。三种情况要分开:
| 现象 | 原因 | 解法 |
|---|---|---|
| 满屏方块 / 豆腐块 | 缺字体,回退到了不含中文字形的字体 | 在阅读器里手动指定中文字体 |
| 满屏问号或锟斤拷、烫烫烫 | 编码不匹配 | 见下 |
| 个别字变问号 | 字体不含那几个生僻字的字形 | 换字库更全的字体 |
EPUB 也会有编码问题,原因是:规范建议内部用 UTF-8,但由别的格式转过来的 EPUB,转换工具可能原样保留了 GBK 的字节却声明成 UTF-8。
最省事的解法是绕开它:用EPUB 转 TXT明确指定正确的源编码导出纯文本,拿到干净的文字后再重新生成 EPUB。编码识别的原理和输出侧的 BOM / CRLF 该怎么选,见EPUB 转 TXT 的章节顺序与编码。
第六步:换阅读器验证
到这一步还打不开,做最后一个判断:用第二个阅读器打开。
- 两个都打不开 → 是文件的问题,回到前五步
- 只有一个打不开 → 兼容性问题,比如老设备只认 EPUB 2 的 NCX 目录,不认 EPUB 3 的 nav 文档
导入后显示不正常(顺序乱、目录点不动、封面不刷新)属于另一类问题,见电子书导进阅读器的六条路。
最后的抢救:目标降级
六步都试了还不行,把目标从「修好这个文件」降为「把文字救出来」,成功率会高很多:
- 解压后直接用浏览器读 xhtml——正文通常能正常显示,没有目录但字都在
- 提取文本重新生成——转成 TXT 检查无误后,用TXT 转 EPUB重新打包成结构规范的文件,比修补坏文件可靠得多
- 换来源重新获取——同一本书往往有多个版本,换一个来源比修一小时划算
- 只救关键部分——尾部损坏时,前面能解出来的章节先留下
什么时候该停手:
- 确认是 DRM → 走官方渠道,没有别的路
- 下载截断且丢失量大 → 重新下载,修复没有意义
- ZIP 文件头都坏了 → 数据不存在,修复工具只能把损坏部分丢掉
一条通用判据:
能不能解压出正文 xhtml,决定这个文件还值不值得救。 能解出来就一定救得回文字;解不出来,别耗时间了。
从源头避免这类问题,见电子书格式决策表——选对格式、保留原件、写全元数据,比事后排查省事得多。