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

Cordova File plugin FileReader.readAsText gets error but does not call error callback

本文关键字:错误 调用 回调 插件 文件 FileReader readAsText Cordova      更新时间:2023-09-26

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

SyntaxError: Unexpected EOF

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

当我调试并一步一步地执行时,在javascript方面,我会在FileReader.js中执行exec()命令,然后在objectiveC中一步一个脚印地执行,这看起来很好,但当objectiveC用其sendPluginResult返回结果时,我在javascript控制台中收到了这个错误消息,并且没有抛出错误回调。。。。

有人经历过吗?有没有发现错误的想法?

非常感谢。

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

我已经搜寻了看不见的字符,删除了换行符,并逃脱了一切可能。将文件读取器更改为readAsBinaryString解决了问题。

Cordova文件插件的readAsText方法中存在已知错误,这意味着包含非ASCII字符的大于256 kB的文件可能会失败,并显示此错误消息。

readAsText()读取256kB块中的文件。对于像UTF-8这样的可变宽度编码,如果有一个多字节字符跨越块边界,那么它将被拆分为两个不同的字节序列,每个字节序列都将被视为一个字符。

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

由于这个问题没有附带测试数据,我不能确定这里发生了什么,但似乎很可能。症状是一致的。

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