我的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
文件?
答案 0 :(得分: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对象。
希望这对某人有帮助!
答案 1 :(得分:1)
我建议使用适当的库,例如bplist-parser(只读)或simple-plist(读写,包装bplist-parser和bplist-creator,还处理纯文本plist) child_process
模块的使用。不要忘记exec
需要特别注意(例如,转义参数),并且使用它很容易使自己陷入困境!
import { parseFile } from 'bplist-parser';
parseFile('./path/to/binary/file.plist', callback);