繁体   English   中英

使用Chrome文件系统写入时,字符串中的Javascript NULL字符

[英]Javascript NULL character in string when writing with chrome fileSystem

我在chrome打包的应用中使用了文件编写器来保存json字符串。 我遵循了将writer设置为在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,如果我确实使用truncate,那么所有这些额外空间都是奇怪的null当我看着崇高的字符

因此,读取的字符串仍然是旧的较长文件的长度,但是当我在控制台中将其登录时,该字符串是正确的,并且我可以复制并粘贴输出并将其设置为较短长度的另一个变量。 但是直接读取的对象仍然是更长的长度,我无法弄清楚如何从末尾修剪空字符

例如,如果文件为1200个字符,而我删除了一些数据并重新保存,则json字符串为800个字符,则文件中的最后400个字符现在为空。 在下一次加载时重新读取数据时,字符串仍为1200个字符,最后400个为“”

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

有没有比扫描字符串,检查charCodeAt == 0并删除其余部分更好的方法来解决此问题? 像是一种更好的写入文件的方式吗?

我找到了这个,因为我也遇到了这个问题。 在进行研究时,我相信我们俩都在错误地使用截短法。

我认为此stackoverflow解释了如何正确使用截断: 使用HTML5 FileWriter覆盖文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM