使用epubjs/epub-parser解析EPUB返回空内容的问题求助
解决EPUB解析中
rawContent?.trim is not a function错误的方案 1. 先排查item.load()的返回值类型
先在代码里加日志确认返回值的类型和实际内容:
const rawContent = await item.load(); console.log('rawContent类型:', typeof rawContent); console.log('rawContent实际值:', rawContent);
如果返回的是Blob或ArrayBuffer而非字符串,就需要手动转换:
// 处理Blob类型 if (rawContent instanceof Blob) { rawContent = await rawContent.text(); } // 处理ArrayBuffer类型 else if (rawContent instanceof ArrayBuffer) { rawContent = new TextDecoder('utf-8').decode(rawContent); } // 再执行trim const cleanedContent = rawContent?.trim();
2. epubjs的针对性调整
epubjs的item.load()默认返回格式可能因EPUB打包方式不同而变化,你可以直接指定返回文本格式:
const rawContent = await item.load({ type: 'text' });
另外注意版本差异,部分旧版epubjs的load()默认返回Blob,必须手动转字符串。
3. 检查EPUB文件的章节资源
哪怕是合规EPUB,也可能存在章节资源路径错误或损坏的情况:
- 对照你附上的spine日志,检查每个item的
href是否指向正确的章节文件 - 用EPUBCheck工具重新验证文件结构,确认章节资源未损坏或加密
4. epub-parser的替代处理方式
如果用的是epub-parser,试试直接读取item的content字段,部分版本中这个字段已经是解析好的字符串:
const chapterContent = item.content; if (typeof chapterContent === 'string') { const cleanedContent = chapterContent.trim(); }
5. 加个边界判断兜底
在调用trim前先做类型校验,避免直接报错:
let cleanedContent = ''; if (typeof rawContent === 'string') { cleanedContent = rawContent.trim(); } else { console.warn('章节内容非字符串类型:', rawContent); // 兜底转成字符串再处理 cleanedContent = String(rawContent).trim(); }
内容的提问来源于stack exchange,提问作者Riri
相关产品推荐
相关产品推荐

