【问题标题】:NodeJS - reading macOS .plist filesNodeJS - 读取 macOS .plist 文件
【发布时间】:2018-08-10 19:27:24
【问题描述】:

我的 Mac 上有一个 .plist 文件,我想阅读。我可以使用 Xcode 轻松打开它,但我想使用 NodeJS 来打开它。

我找到了plist 包,我正在尝试这样使用它:

import fs from 'fs';
import plist from 'plist';

fs.readFile('/my/path/here.plist', 'utf-8', (err, data) => {
  console.log('#data', data);
  const obj = plist.parse(data);
  console.log('#obj', obj);
});

data 得到的结果是这样的(该文件的一部分)

dataYdisplayasZfile-label]file-mod-date[arrangement_preferreditemsize��-   O(book(0$Usersnyc    Downloads �i(�   +� HXhA���L�  file:///Macintosh

plist 包抛出错误,因为我猜它需要 XML 格式的字符串。

我怎样才能读取这样的.plist 文件?

【问题讨论】:

  • 您是否尝试声明 'utf8' 而不是 'utf-8'?
  • @Jayffe 我发现了问题所在 - 它是一个二进制文件,所以我需要找到一种方法将其转换为纯 xml :)

标签: node.js macos electron


【解决方案1】:

好的,找到了解决方案。猜猜张贴到 SO 让我在谷歌搜索中获得更多运气......

macOS .plist 文件大多是二进制文件。有一个命令plutil 允许您将二进制转换为xml,因此要在节点中执行此操作,您必须:

import { exec } from 'child_process';

const command = 'plutil -convert xml1 ./path/to/binary/file.plist';
exec(command, callback); // Here you gonna convert this file to plain `xml`.

然后你只需要从上面重复我的步骤 - 使用fs.readFile 读取文件,然后使用plist 包转换它,这样你就得到了一个漂亮的 JS 对象。

希望这对某人有所帮助!

【讨论】:

    【解决方案2】:

    我建议使用适当的库,例如 bplist-parser(只读)或 simple-plist(读写,包装 bplist-parser 和 bplist-creator,也处理纯文本 plist),而不是使用 @ 987654323@ 模块。不要忘记exec 需要特别小心(例如转义参数),使用它很容易射中自己的脚!

    import { parseFile } from 'bplist-parser';
    
    parseFile('./path/to/binary/file.plist', callback);
    

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多