NodeJS - 读取macOS的.plist文件

4

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

我得到的数据长这样(来自那个文件的一部分)
dataYdisplayasZfile-label]file-mod-date[arrangement_preferreditemsize��-   O(book(0$Usersnyc    Downloads �i(�   +� HXhA���L�  file:///Macintosh

plist包似乎期望接收XML格式的字符串,因此它出现了错误。

我该如何读取这样的.plist文件?


你是否尝试过声明“utf8”而不是“utf-8”? - Jayffe
@Jayffe 我找到了问题所在 - 它是一个二进制文件,所以我需要找到一种将其转换为普通的 xml 的方法 :) - mdmb
2个回答

5

我建议使用适当的库,例如bplist-parser(只读)或simple-plist(可读写,包装了bplist-parser和bplist-creator,并处理纯文本plist),而不是使用child_process模块。别忘了exec需要特别注意(例如参数转义),使用它很容易自食恶果!

import { parseFile } from 'bplist-parser';

parseFile('./path/to/binary/file.plist', callback);

4

好的,找到解决方案。猜想在stackoverflow上发帖给了我更多在谷歌上搜索的运气...

macOS的.plist文件大多数是二进制的。有一个命令plutil可以将二进制转换为xml格式,所以在node中要执行此操作,您需要:

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对象。

希望这能帮到您!


考虑使用 https://www.npmjs.com/package/plist MacOS。 - Aerodynamic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接