我想将.ichat
文件(存档的macOS消息聊天)中的聊天消息转换为人类可读的形式,如下所示。 (我的谈话都是一对一的,以简化事情!)
似乎没有现成的实用工具可以做到这一点,所以我想写自己的,但这种格式含糊不清,说得温和,我找不到任何相关的文档。
这些文件中充满了奇怪的CF$UID
条目,偶尔会有一些条目是实际的短信,没有明显的方法可以告诉哪个人说了什么。
以下是概述格式的摘录:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>$archiver</key>
<string>NSKeyedArchiver</string>
<key>$objects</key>
<array>
<string>$null</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
<integer>73</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
<integer>2</integer>
</dict>
<dict>
<key>CF$UID</key>
<integer>3</integer>
</dict>
...
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
<integer>10</integer>
</dict>
<key>NS.string</key>
<string>Hello, World!</string>
</dict>
答案 0 :(得分:1)
这些plist采用NSKeyedArchiver格式,2016年博文中对此进行了解释:Manual Analysis of ‘NSKeyedArchiver’ Formatted Plist Files。简而言之,与$objects
键关联的数组包含有序的对象列表,分散在<string>
标记中的plist中的十六进制字节是该列表的索引。顶级对象在与$top
键关联的字典中标识。
unarchive-plist是一个Python脚本,用于将这些plist转换为更易于理解的格式,但它仅适用于macOS。