python plistlib文件被cocoa值侵略?

时间:2012-06-06 22:29:49

标签: python plist

我正在使用plistlib在OS X中创建和更新一个简单的plist文件。挪威的测试人员从plistlib收到错误:

File "../axeomatic2/normal/build/pyi.darwin/aomDSP/out03-PYZ.pyz/plistlib", line 406, in parse
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 8

查看在他的系统上生成的plist文件,我看到这样的字段穿插了预期的条目:

NSTableView Sort Ordering       Array
...
NSTableView Hidden Columns      Array
...
NSTableView Columns             Array
...
NSNavLastRootDirectory          Array

如果我从我的系统给他一个plist它工作正常,但是只要程序决定它需要从头创建一个它就会出错。

我想也许这是一个编码问题,但我们都在OS X 10.7上,并且都使用OS X版本的UTF-8。

有关可能发生的事情或我如何远程排除故障的任何想法?

3 个答案:

答案 0 :(得分:3)

之前我遇到过类似的问题,在我尝试biplist之后,它已经解决了。

答案 1 :(得分:1)

自python 3.4以来,plistlib已添加二进制plist支持。 https://docs.python.org/3.4/library/plistlib.html

答案 2 :(得分:0)

实际上有两类plist格式。一个是简单的XML文件(plistlib知道如何使用expat进行解析),另一个是binary property list

不幸的是,它们都共享相同的后缀.plist,并且Apple的所有工具都透明地对待它们(例如,您不知道是否正在使用XML plist或二进制plist,使用{{}等工具1}})

就像@northtree所说,defaults包是读取/写入二进制plist文件的正确工具。

更新:

您还可以使用OSX附带的biplist将任何plutil(1)文件转换回XML格式,然后由plist处理

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/plutil.1.html