【问题标题】:Javascript NULL character in string when writing with chrome fileSystem使用chrome fileSystem编写时字符串中的Javascript NULL字符
【发布时间】:2013-07-22 03:28:47
【问题描述】:

我在 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);
            });
        })
    }

问题是,当我用较短的数据覆盖较长的文件时,如果我不使用截断,则会留下额外的数据,并且我无法在下次加载时读取有效的 json,如果我确实使用截断,那么所有额外的空间当我在崇高的时候看到奇怪的空字符

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

例如,如果文件为 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 并删除其余部分更好的方法来解决这个问题?比如,写入文件的更好方法?

【问题讨论】:

  • 你知道你最后一个字符的索引吗...?
  • 是的,我只是搜索 RegExp('\0')

标签: javascript json string parsing null


【解决方案1】:

我发现这个是因为我也遇到了这个问题。在做研究时,我相信我们都错误地使用了截断。

我认为这个 stackoverflow 解释了如何正确使用截断:overwrite a file with HTML5 FileWriter

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2016-03-10
    • 2012-10-12
    相关资源
    最近更新 更多