Cordova 文件插件 FileReader.readAsText 得到错误但不调用错误回调

Posted

技术标签:

【中文标题】Cordova 文件插件 FileReader.readAsText 得到错误但不调用错误回调【英文标题】:Cordova File plugin FileReader.readAsText gets error but does not call error callback 【发布时间】:2015-06-21 13:36:02 【问题描述】:

我正在使用 Cordova File 插件在本地文件系统上读取 JSON。它工作得很好,除了一些我得到错误的文件:

SyntaxError: Unexpected EOF

这些文件可能有错误的字符,我需要修复它们,但我的问题不存在。我的问题是插件记录了错误(在 javascript 端)但从不调用任何错误回调!!!

当我调试并逐步执行时,在 javascript 端,我到达 FileReader.js 中的 exec() 命令,然后我在 ObjectiveC 中逐步执行,看起来非常好,但是当 ObjectiveC 返回结果时返回其 sendPluginResult,我在 javascript 控制台中收到此错误消息,并且没有抛出错误回调....

有人经历过吗?有什么办法可以发现错误吗?

非常感谢。

【问题讨论】:

能否提供有问题的代码块? 【参考方案1】:

不知道你是否解决了你的问题,但我也遇到了类似的问题,通过将$cordovaFile.readAsText 更改为$cordovaFile.readAsBinaryString 解决了,没有其他更改。没有更多的 EOF 问题。

我已经猎杀了隐形字符,删除了换行符并逃脱了一切可能的事情。将文件阅读器更改为readAsBinaryString 即可解决问题。

【讨论】:

同样,你救了我,tnx!! 请注意,readAsBinaryString() 对于非 ASCII 字符会给出不正确的结果,并且不是解决此问题的通用方法。 @NateEag 是正确的我现在正在处理一个问题,处理上面提到的 2 个 $cordovaFile 方法,readAsBinaryString() 在某些文件中导致很多问题,但在其他文件中没有。 @Ju66ernaut 我下面的回答应该为您指明正确解决此问题的正确方向。【参考方案2】:

Cordova file plugin's readAsText method 中有一个已知错误,这意味着包含非 ASCII 字符的大于 256 kB 的文件可能会失败并显示此错误消息。

readAsText() 读取 256 kB 块中的文件。使用variable-width encodings 和UTF-8 一样,如果有一个多字节字符跨越块边界,那么它将被分成两个不同的字节序列,每个字节序列都将被视为一个字符。

当 JS 环境尝试将第一个大块与这样的拆分字符连接时,它会看到字符串中不允许的字节序列并抛出 SyntaxError。

由于这个问题没有附加测试数据,我不能确定这就是这里发生的事情,但似乎很有可能。症状排成一列。

我在上面链接的 GitHub 问题提出了一种解决方法,即使用 readAsArrayBuffer() 方法并使用浏览器内置的 TextDecoder.decode() method 将文件转换为正确的编码。

【讨论】:

以上是关于Cordova 文件插件 FileReader.readAsText 得到错误但不调用错误回调的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 插件和依赖项

获取 Cordova 插件头文件路径

如何在 Cordova 插件中加载数据文件?

将 .so 文件添加到 Cordova 插件

Cordova - 插件和 config.xml 文件

如何设置具有 IDE 支持的 Cordova 插件项目?