繁体   English   中英

如何使用JXA将LZ压缩字符串写入文本文件?

[英]How do I write a LZ compressed string to text file using JXA?

我正在尝试在Apple脚本编辑器中编写一个JXA脚本,它使用LZ算法压缩字符串并将其写入文本(JSON)文件:

var story = "Once upon a time in Silicon Valley..."
var storyC = LZString.compress(story)
var data_to_write = "{\x22test\x22\x20:\x20\x22"+storyC+"\x22}"
app.displayAlert(data_to_write)
var desktopString = app.pathTo("desktop").toString()
var file = `${desktopString}/test.json`
writeTextToFile(data_to_write, file, true)

除了将LZ压缩字符串转换为一组“?”之外,一切正常。 到达输出文件时, test.json

它应该看起来像:

{"test" : "㲃냆੠Њޱᐈ攀렒삶퓲ٔ쀛䳂䨀푖㢈Ӱນꀀ"}

相反,它看起来像:

{"test" : "????????????????????"}

我有一种感觉,转换发生在writeTextToFile()函数使用的app.write命令中(我从Apple的Mac自动化脚本编写指南中的示例中提取):

var app = Application.currentApplication()
app.includeStandardAdditions = true

function writeTextToFile(text, file, overwriteExistingContent) {
    try {

        // Convert the file to a string
        var fileString = file.toString()

        // Open the file for writing
        var openedFile = app.openForAccess(Path(fileString), { writePermission: true })

        // Clear the file if content should be overwritten
        if (overwriteExistingContent) {
            app.setEof(openedFile, { to: 0 })
        }

        // Write the new content to the file
        app.write(text, { to: openedFile, startingAt: app.getEof(openedFile) })

        // Close the file
        app.closeAccess(openedFile)

        // Return a boolean indicating that writing was successful
        return true
    }
    catch(error) {

        try {
            // Close the file
            app.closeAccess(file)
        }
        catch(error) {
            // Report the error is closing failed
            console.log(`Couldn't close file: ${error}`)
        }

        // Return a boolean indicating that writing was successful
        return false
    }
}

是否有app.write的替代命令维护LZ压缩字符串/更好的方法来完成我想要做的事情?

另外,我使用readFile()函数(也来自Scripting Guide )将LZ字符串加载回脚本:

function readFile(file) {
    // Convert the file to a string
    var fileString = file.toString()

    // Read the file and return its contents
    return app.read(Path(fileString))
}

但不是回归:

{"test" : "㲃냆੠Њޱᐈ攀렒삶퓲ٔ쀛䳂䨀푖㢈Ӱນꀀ"}

它正在回归:

"{\"test\" : \"㲃냆੠Њޱᐈ攀렒삶퓲ٔ쀛䳂䨀푖㢈Ӱນꀀ\"}"

有没有人知道这方面的解决方案?

我知道可以在JXA脚本中使用Cocoa ,所以解决方案可能就在其中吗?

我刚刚开始掌握JavaScript,所以我承认尝试掌握Objective-C或者Swift现在已经远远超出了我。

我期待您能够提供给我的任何解决方案和/或指示。 提前致谢!

经过一些Googl'ing之后,我发现了这两个帖子:

因此我改变了我的剧本。

writeTextToFile()现在看起来像:

function writeTextToFile(text, file) {
  // source: https://stackoverflow.com/a/44293869/11616368
  var nsStr       = $.NSString.alloc.initWithUTF8String(text)
  var nsPath      = $(file).stringByStandardizingPath
  var successBool  = nsStr.writeToFileAtomicallyEncodingError(nsPath, false, $.NSUTF8StringEncoding, null)
  if (!successBool) {
    throw new Error("function writeFile ERROR:\nWrite to File FAILED for:\n" + file)
  }
  return successBool  
};

readFile()看起来像:

ObjC.import('Foundation')
const readFile = function (path, encoding) {
  // source: https://github.com/JXA-Cookbook/JXA-Cookbook/issues/25#issuecomment-271204038
    pathString = path.toString()
    !encoding && (encoding = $.NSUTF8StringEncoding)
    const fm = $.NSFileManager.defaultManager
    const data = fm.contentsAtPath(pathString)
    const str = $.NSString.alloc.initWithDataEncoding(data, encoding)
    return ObjC.unwrap(str)
};

两者都使用Objective-C来克服app.writeapp.read无法处理UTF-8。

如何读取文本文件的内容并将其写入<div>使用普通的 JavaScript?</div><div id="text_translate"><p> <strong>问题:</strong>如何从文本文件中读取内容(与 html 页面一起保存在服务器上)并将该内容写入 HTML 页面上的<em>“innerHTML”</em>中?</p><p> <strong>上下文:</strong>我想创建一个用作博客的 static 网站。 但是,我希望只有一个帖子页面,每个帖子都从文本文件中读取并写入页面的主 div。 文本文件中的内容将用所需的 html 标记进行标记,以便它们在写入 div 时像 html 一样 function (但文件本身将保存为<em>.txt</em>文件)</p><p> 理想情况下,文本文件应该能够存储在与调用它的 html 页面(和/或脚本文件)不同的文件夹中。</p><p> <strong>附加信息:</strong>我遇到的大多数解决方案都与读取用户上传的文件有关。 这不是我想要理解的。 我试图了解如何从作为网站资产一部分存储的文本文件中读取数据。</p></div>

[英]How do I read a text file's content and write it to a <div> using plain JavaScript?

暂无
暂无

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

相关问题 LZ字符串压缩文本的MySQL数据类型 如何使用 JXA 将图像或文件复制到剪贴板? 在WebExtensions中读取LZ4压缩文本文件(mozlz4)(JavaScript,Firefox) Javascript LZ 字符串压缩 检查字符串是否已经压缩 如何使用JXA脚本选择邮件消息 我如何在JXA中查看NSData数组的内容? 如何获得JXA对象的实际类 如何在JavaScript字符串中创建换行符以提供给NodeJS以写入文本文件? 如何读取文本文件的内容并将其写入<div>使用普通的 JavaScript?</div><div id="text_translate"><p> <strong>问题:</strong>如何从文本文件中读取内容(与 html 页面一起保存在服务器上)并将该内容写入 HTML 页面上的<em>“innerHTML”</em>中?</p><p> <strong>上下文:</strong>我想创建一个用作博客的 static 网站。 但是,我希望只有一个帖子页面,每个帖子都从文本文件中读取并写入页面的主 div。 文本文件中的内容将用所需的 html 标记进行标记,以便它们在写入 div 时像 html 一样 function (但文件本身将保存为<em>.txt</em>文件)</p><p> 理想情况下,文本文件应该能够存储在与调用它的 html 页面(和/或脚本文件)不同的文件夹中。</p><p> <strong>附加信息:</strong>我遇到的大多数解决方案都与读取用户上传的文件有关。 这不是我想要理解的。 我试图了解如何从作为网站资产一部分存储的文本文件中读取数据。</p></div> 如何写入文件并使用 Javascript 下载文件?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM