推送 EPUB 文件到 Kindle 的常见失败原因及解决方法
书伴之前发布了一篇文章《如何快速无损修复推送失败的 EPUB 格式电子书文件》,文中提供的修复方法可解决大部分推送 EPUB 文件后收到亚马逊系统退信的问题。但是此方法并不能覆盖所有问题,随着小伙伴不断向书伴提供样本文件,更多推送 EPUB 文件相关的问题得以显现。
本文根据小伙伴们提供的样本文件汇总了一些具有代表性的问题,并为每个问题提供了相应的解决方法。这些问题被分成了两大类,分别是“导致推送失败的问题”和“导致内容有误的问题”。前者主要解决推送不可达的问题,后者主要解决虽推送成功内容却存在可读性问题的问题。
本文会用到 Sigil 这款软件,如果其它软件(如 Calibre)有同等功能也可以作为替代。
一、导致推送失败的问题
推送失败是指无法将 EPUB 文件成功推送到 Kindle,通常你会收到亚马逊的一封题为“您发送到 Kindle 的文档有问题”的退信,内容除了一个格式支持列表,未提供对解决问题有价值的信息。
一个 EPUB 文件可能同时存在下面这些问题,你可以在推送失败使逐一排查和修复。
1、EPUB 中的某些文件不符合规范
亚马逊的个人文档服务对推送的 EPUB 文件有较强的容错机制,即便有些内容不符合 EPUB 规范,一般情况下也能被正常处理,但是唯独对 EPUB 2.0 的导航控制文件 toc.ncx 及 EPUB 3.0 的导航文档 nav.xhtml 比较敏感,如果这两个文件存在“错误”,就会大概率导致推送失败。
这是导致 EPUB 推送失败最常见的问题,也是首先要尝试解决的问题。具体解决方法如下:
用 Sigil 打开 EPUB 文件,依次点击菜单【工具(Tools) → 目录(Table Of Contents) → 生成目录…(Generate Table Of Contents…)】(或按快捷键,Windows 是【Ctrl + T】,macOS 是【Command + T】。不过需要注意,这种方式可能会破坏目录层级。
最后点击左上角的软盘图标按钮(或按快捷键,Windows 是【Ctrl + S】,macOS 是【Command + S】)保存修改后的文件。
关于此问题的详细解释可参考《如何快速无损修复推送失败的 EPUB 格式电子书文件》一文。
2、XHTML 文件名含空格和中文字符
如果 EPUB 文件被插入了广告页面,且文件名带有空格和中文字符,也会导致推送失败。解决方法是,用 Sigil 打开 EPUB 文件,直接将带空格和中文字符的 XHTML 页面删掉再保存即可。
3、OPF 文件中的 language 元素有误
用 Sigil 打开 EPUB 文件,检查其 OPF 文件(通常文件名为 content.opf)元数据中的 <language>
元素,如果该元素缺失,或者其内容部分未指定语言代码,或指定了错误的语言代码(如下所示)都会导致推送失败。
<dc:language>und</dc:language>
解决方法为用 Sigil 编辑 OPF 文件,如果发现缺失 <language>
元素,则在 <metadata>
元素中添加如下所示的代码,注意语言代码以实际为准。如果 <language>
元素中的语言代码有误,则改成有效的语言代码,如中文的 zh
,英文的 en
,更多请参考 ISO 639-1 语言代码列表。
<dc:language>zh</dc:language>
你也可以通过 Sigil 的菜单添加或修改语言元素。首先点击【工具(Tools)→ 元数据编辑器…(Metadata Editor…)】调出元数据编辑界面。如果缺失 <language>
元素,可点击【添加元数据(Add Metadata)】按钮,选择“语言(Language)”,点击【OK】按钮后再选择“中文 – 中国(Chinese – China)”,点击两次【OK】按钮完成添加。注意不要重复添加。
如果 <language>
元素中的语言代码有误,双击“语言(Language)”的“值(Value)”相应的字段,选择“中文 – 中国(Chinese – China)”,点击【OK】按钮完成修改。
最后点击左上角的软盘图标按钮(或按快捷键,Windows 是【Ctrl + S】,macOS 是【Command + S】)保存修改后的文件。
当然,除了是用 Sigil 外,你也可使用 Calibre 的电子书元数据功能实现同样的目的。
4、OPF 文件中出现重复的 item 元素
如果 OPF 文件中的 <item>
元素重复也会导致推送失败,将那些元素去重就可以成功推送了。Sigil 貌似没有工具可以检测这个问题,你可以尝试用 KindleGen 转换有问题的 EPUB 文件,如果有 item 元素出现重复,软件会提示你具体是哪一个重复了,提示信息如下所示:
Error(xmlmake):E27012: Item or process id already used: 180630.jpg
5、在 CSS 中隐藏的字符数超过了限制
Kindle 电子书对 CSS 声明 display:none;
的使用有限制,隐藏内容区块中的字符不能超过 10000 个,否则会导致推送失败。因此,建议删除 CSS 文件中所有 display:none;
声明。
6、XHTML 中的元素含有不兼容属性
检查 XHTML 中是否有元素像下面那样使用了属性 data-amznremoved
,如果有的话需要将其移除,否则会导致推送失败。这可能是 Send to Kindle 服务无法正确处理此属性导致的。
<span class="jpchar" data-amznremoved="mobi7">A Sample</span>
7、XHTML 文件中的 body 标签含 ID
在 EPUB 文件的 toc.ncx 文件中,有些 <content>
元素的 src
属性值所指向的 XHTML 文件路径含有 URL 片段,即类似路径 text/part0000.html#test_1 中的 #test_1,如果其对应的 id
属性在 <body>
元素上,可能会导致推送失败。解决方法是,将 <body>
元素上对应的 id
值移至其子元素上,或直接删除路径中片段部分(即 #
和其后的字符)。
最后点击左上角的软盘图标按钮(或按快捷键,Windows 是【Ctrl + S】,macOS 是【Command + S】)保存修改后的文件。
8、NCX 文件中包含的导航目录条目过多
如果要推送的电子书导航目录超过 1321 条,大概率也会推送失败。由于是亚马逊服务器方面的限制,目前没有太完美的解决方案。变通的解决方案有两种:一种是编辑 EPUB 文件中的 NCX 文件,删减 <navPoint>
元素的数量,这种方法的缺点是会影响 Kindle 目录导航功能;另一种是将 EPUB 文件化整为零,将电子书分割成多份,这种方法的缺点是会多出很多工作量。
二、导致内容出错的问题
有时 EPUB 文件即便是推送成功,其内容也存在可读性问题,如乱码、目录层级有误等。
1、电子书内容出现乱码
推送的电子书出现乱码的一般表现为,中文电子书全部乱码,英文电子书部分标点符号乱码。一般情况下,这是由于 EPUB 文件中的 XHTML 文件没有指定 UTF8 编码导致的。
解决方法为:下载并安装 EPUB 编辑器 Sigil,然后用 Sigil 打开 EPUB 文件,依次点击菜单【工具(Tools)→ HTML 重新格式化(Reformat HTML)→ 改进所有 HTML 文件(Mend All HTML Files)】,让 Sigil 自动修补所有 HTML 文件,最后保存再推送就可以了。
2、电子书目录层级有误
如果电子书的目录层级与你的预期不相符,你可以用 Sigil 的目录编辑功能【Tools(工具) → 目录(Table Of Contents)→ 编辑目录…(Edit Table Of Contents…)】调整一下。
- 通过键盘上的上下方向键(或通过鼠标点击)可选中标题;
- 按住 Ctrl 键加上下方向键调整标题的顺序(也可以点击界面右侧的上下方向按钮);
- 左右方向键调整标题的缩进(也可以点击界面右侧的左右方向按钮);
- 编辑完成后点击【OK】 按钮保存即可。
最后点击左上角的软盘图标按钮(或按快捷键,Windows 是【Ctrl + S】,macOS 是【Command + S】)保存修改后的文件。
3、电子书导航目录缺失
如果推送 EPUB 电子书到 Kindle 后,无法通过 Kindle 的“前往”功能进行目录导航,有可能是因为 EPUB 的导航文件(文件名一般是 toc.ncx)中的 URI 带有片段(如下所示)导致的。
text/part0001.html#UGI0-1af7590487e04e47b91ab6bb431b89f3
虽然 EPUB 规范上这样做是没错的,但是估计是亚马逊服务器的怪癖,在转换格式时丢失了导航目录。解决方法有两种,一种是删除 URI 中的片段,另一种是重新生成目录。具体方法如下:
删除 URI 片段的具体方为,用 Sigil 打开 EPUB 文件,双击打开左侧栏中的文件 toc.ncx,然后在“查找”输入框中输入正则表达式 #[^"]*
,“替换”输入框留空,“模式”下拉菜单选择“正则表达式”,最后点击“替换”输入框后的第二个按钮全部替换并保存即可。
另一种用 Sigil 的目录生成工具重新生成一遍目录,具体方法为,依次点击菜单【工具 → 目录 → 生成目录】并保存即可。注意,这种方式在某些情况下可能会改变目录层级。
由于受限于 EPUB 文件样本数量,以上这些问题无法覆盖所有情况,如果你在使用以上方法修复 EPUB 文件后仍然推送失败,可以尝试使用 Sigil + EpubCheck 插件检测并修复 content.opf 和 toc.ncx 这两个文件存在的所有问题,一般均可成功推送。
也可以尝试使用 Calibre 格式转换功能,现将 EPUB 格式转换成 AZW3,然后再转换成 EPUB 格式,有时也能解决推送失败的问题。
另外,如果你推送的电子书是 EPUB 3.0,即文件中不包含 .ncx 文件,可能也会出现导航目录缺失的问题,这可能是因为亚马逊服务器不支持这种目录导航格式。解决方法是先用 Calibre 等软件将电子书文件转换成 EPUB 2.0,然后按照上面的方法确保目录无误。
4、电子书字体显示异常
如果推送到 Kindle 的电子书显示的字体不一致,比如黑体宋体掺杂在一起,有可能是电子书的实际语言与原数据中的语言不一致导致的,比如某本书的文本实际上是中文,但是原数据中的语言却是英文。你可以使用 Sigil 或 Calibre 的原数据编辑功能修改原数据中的语言,使其与实际语言保持一致,具体方法请参考“3、OPF 文件中的 language 元素有误”。
如果你有更好的解决方案或小技巧,也欢迎在本文下方留言分享。
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/992.html
最近推送一本书,手机端kindle的阅读界面左上角有个相机的图标,请问有人碰到这种情况吗
你可以检查一下电子书的源代码,看看里面是不是有缺失的图片。
用calibre推送epub标题全是拼音怎么办啊?
目前只能手动将电子书文件名改为中文,再通过邮箱推送。在亚马逊没有修复好电子书元数据读取故障之前,没什么其它太好的解决办法
zlibrary下载的epub格式的电子书邮箱推送到kindle为什么没有目录呢?导入微信读书是有目录的,亚马逊是美亚账号
同问,我也遇到了
我也有很多书没有目录
epub推送失败,根据我的个人经验是直接通过calibre的转换功能从epub到epub,就相当于自己转自己,不需要转到azw3再转回来,转换完之后会生成一个ORIGINAL_EPUB文件和新的epub文件。ORIGINAL_EPUB就是你原来那个转换之前的文件,这个转换的过程也相当于一个修复的过程。推送的时候就直接推送新的epub,无法推送的问题就解决了。
你好,我想问一下,kindle最大可以导入多少MB的epbu格式的电子书,我导入了一个167MB的电子书,不知道为啥kindle的图书馆里就不显示,谢谢。
推送电子书单个文件大小最大支持 50MB。如果文件大小如果大于这个数值,建议先转换成 AZW3 或 MOBI 格式,再通过 USB 数据线拷贝到 Kindle 中。
您好
自己制作的ePub文件无法发至kindle,按上文内容排查后还是无法发送至kindle邮箱
已进行Sigil的[工具-HTML重新格式化-改进所有HTML文件],并重新生成了目录,仍是无法发送ePub至kindle
能帮忙看一下无法发送ePub是什么原因吗?
https://musetransfer.com/s/edysnpson(有效期至8月8日)|【Muse】你有一份文件待查收,请点击链接获取文件
您好
从zlib上下载下来的ePub文件无法发至kindle,按上文内容排查后还是无法发送至kindle邮箱
又尝试Sigil的[工具-HTML重新格式化-改进所有HTML文件],甚至重新生成了目录,仍是无法发送ePub至kindle
最后是转换成mobi才发送成功的
能帮忙看一下无法发送ePub是什么原因吗(我确定我保存了,笑)
网盘链接(如果发得出去): https://pan.baidu.com/s/1etJIHWAWC8s4MTWJvi82RQ 提取码: kndl
谢谢
用Calibre做了一次ePub2ePub转换,又可以推送了
对比之后发现,Calibre在所有的单一
、
等等标签对中加上了类似class=”calibre7″的内容,变成
「……」
为什么HTML发不出去:(
总之就是变成了 之类的,会不会是这个原因?
谢谢!
这本电子书推送失败的原因是 content.opf 这个文件中
media-type
为image/jpeg
的<item>
元素有很多重复的,去重后就可以正常推送了。修复后的文件已发送到你留言时留下的邮箱中。请问我推送epub文件失败是什么原因呢?
Dear Kindle Customer,
The following document, sent by you at 07:08 AM on Mon, Jul 18, 2022 GMT , could not be delivered to the address you specified:
* 羊脂球:莫泊桑短篇小说选【文景·恒星系。收录《项链》《我的叔叔于勒》等29篇名作。有时像冰,有时也像冰糖,但总能映照出确切、完全、永恒动人的世间真相】 – 居伊·德·莫泊桑.epub
Send to Kindle supports the following document formats:
Adobe PDF (.pdf)
Microsoft Word (.doc, .docx)
Rich Text Format (.rtf)
HTML (.htm, .html)
Text (.txt) documents
Archived documents (zip , x-zip) and compressed archived documents
MOBI (.azw, .mobi) (will not support the most up-to-date Kindle features for documents)
JPEG (.jpg), GIF (.gif), Bitmap (.bmp), and PNG (.png) images .
Additionally, Send to Kindle emails now supports EPUB (.epub). Later this year, we’ll also be adding EPUB support to the free Kindle app for iOS and Android devices and the Send to Kindle desktop app for PC and Mac.
If the format of the document that failed is supported (listed above), please ensure the document is not password protected or encrypted, and try sending it again.
You can learn more about sending personal documents to your Kindle in our product info pages: https://www.amazon.com/sendtokindle
If you would like immediate assistance, please contact customer support at +1-866-321-8851 (US customers) or +1-206-266-0927 (International customers).
Sincerely,
Amazon Kindle Support
自动回复邮件没有给出推送失败的具体原因。你可以按照文中列出的情况逐一排查。
epub格式不显示封面应该如何解决
如果你的 Kindle 已经成功越狱,可以安装插件版进行修复,如果没有越狱就不行了,因为修复个人文档封面需要修改 Kindle 系统中的文件。
我推送的epub存在标点符号乱码,在calibre里点击编辑epub中的“规范标点符号”按钮解决了,省去了安装sigil的麻烦,安装sigil后c盘被吃掉了约5g的空间,受不了。
我用邮箱推送了epub的书籍,但是都没有显示封面,在kindle app中则会显示。
这是在 Kindle 设备上一直存在的老问题,即推送旧的 MOBI7 格式文件显示封面,推送较新的 MOBI8 格式文件不显示封面。由于 EPUB 推送后会被转换成 AZW3 格式(等同于 MOBI8 或 KF8 格式),因此也不会显示封面。关于这个问题的详细说明可参考《为什么推送到 Kindle 的 KF8 标准 MOBI 电子书不显示封面》这篇文章。
epub是不是不支持杂志格式,只支持书籍格式?最近收到的kindle4rss推送的是epub格式,打开后是跟普通书籍一样的目录格式,不是之前杂志模式的格式了
期刊样式的电子书只有老的 MOBI7 格式支持。
能提供kindle app(国际)的下载方式吗,亚马逊说是要在kindle app中加入epub支持,但是国内google play连不上
亚马逊在这个页面提供了 Kindle 应用的 APK 文件下载。
这是kfc版本(国区版),不能登录美亚账号
美亚貌似没有提供 Kindle 应用的 APK 文件下载,只能下载第三方网站提供的 APK 文件了。
epub推送之后,在kindle设备,calibre,koreader中无异常,但kindle安卓app能够接受到推送文档,能够下载,但无法打开文件(点击后卡死在封面上),这是epub的锅还是kindle app的锅,很烦
可能是应用的原因?等 Kindle 应用更新版本再看看。
是kindle安卓端的问题,参看mox.vol的解释,kindle硬件和ios端推荐用epub推送,安卓端还是得用mobi推送,等亚马逊更新修复了
请问kindle现在可以看epub格式了吗?
不支持,目前 Kindle 只支持通过邮箱推送 EPUB 格式(实际上会被亚马逊的服务器自动转换成 AZW3 格式再发送到你的 Kindle 中)。
请问一下通过第三方网站推送的epub格式无法在ios端的kindle app里显示,第三方网站显示推送已经成功是什么原因呢?ios端的尝试在国区和美区各下载了一次APP,均不显示,同步过后也未显示。
你可以用邮箱手动推送一个文档测试一下,看能否收到,如果能就是那个网站提供的推送有问题。