使用chrome fileSystem编写时,字符串中的Javascript NULL字符

Javascript NULL character in string when writing with chrome fileSystem

本文关键字:Javascript NULL 字符 字符串 fileSystem chrome 使用      更新时间:2023-09-26

我在chrome打包的应用程序中使用了一个文件编写器来保存json字符串。我遵循了一些示例,其中写入程序被设置为截断blob的长度,这样文件就可以用更短的数据覆盖。

this.writeLocalFile = function(){
        chrome.fileSystem.getWritableEntry(self.localFile, function(writableEntry){
            console.log(writableEntry);
            writableEntry.createWriter(function(writer) {
                writer.onerror = function(){
                    console.log("error");
                }
                writer.onwriteend = function(){
                    console.log("Write ended");
                }
                self.getData();
                blob = new Blob([self.data], {type: 'text/plain'});
                writer.truncate(blob.size);
                //writer.seek(0);
                writer.write(blob);
            }, function(error){
                console.log(error);
            });
        })
    }

问题是,当我用较短的数据覆盖较长的文件时,如果我不使用truncate,多余的数据就会留下,并且我在下一次加载时无法读取有效的json,如果我使用truncated,那么当我在高级中查看时,所有额外的空间都是奇怪的null字符

因此,读取的字符串仍然是旧的较长文件的长度,但当我将其登录到控制台时,该字符串是正确的,我可以复制并粘贴输出,并将其设置为另一个较短长度的变量。但是直接读取的对象仍然是较长的长度,我不知道如何从结束中修剪空字符

例如,如果文件是1200个字符,我删除了一些数据并重新保存,使json字符串是800个字符,那么文件中最后的400个字符现在为null。当我在下一次加载时重读数据时,字符串仍然是1200个字符,最后400个字符是"

weirdstring[900]//""
weirdstring[900] == ""   // false
weirdstring[900] == null // false
weirdstring[900].length // 1
!weirdstring[900] // false
weirdstring.charCodeAt(900) // 0

有比扫描字符串、检查charCodeAt==0并删除其余部分更好的方法来解决这个问题吗?比如,写文件的更好方法?

我发现这个问题是因为我也有这个问题。在进行研究时,我认为我们都使用了truncate。

我认为这个stackoverflow解释了如何正确使用truncate:用HTML5FileWriter 覆盖文件