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 得到错误但不调用错误回调的主要内容,如果未能解决你的问题,请参考以下文章