【发布时间】:2021-09-08 01:01:07
【问题描述】:
我正在处理许多 .plist 文件。通常我在记事本或类似程序中打开它们,显示以下第一行(文件很大,因此我将示例简化为几行):
<?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>cert</key>
<array>
<dict>
<key>KeyNameHere</key>
<data>
MQwwCgwEcHJvdAwCZGs=
</data>
<key>AnotherKeyNameHere</key>
<data>
NjU0QkNBOUYtQjM4Qi00NzY3LUEyRjYtRDkwQ0EyNzcyQTM3
</data>
<key>UUID</key>
<data>
NjY4NzUzRTItNTg3OC00MDNBLUE3NkYtQzZCQzQ3QjVEMzIz
dict 元素中的值字段包含以 base64 编码的字符串(我在这里使用的术语是否正确?)。所以我的想法是编写一个脚本来解析和解码这些值。我首先编写了这个脚本以在 Python 中打开和打印 plist 文件:
import plistlib
with open("..test.plist", "rb") as file:
pl = plistlib.load(file)
for x in pl:
for y in pl[x]:
for z in y:
print(z, y[z])
但是,当我运行此脚本时,字典中的许多值字段都以解码/人类可读的格式显示。例如,UUID 字段不显示为 base64 字符串,而是显示为 UUID。
为什么记事本和类似程序将值字段显示为base64,在python中打开时(我尝试在Python中打开“rb”和“r”,都给出相同的结果)不编码/解码为基数64?任何有关理解解码/编码差异的帮助和输入将不胜感激。
【问题讨论】:
标签: python encoding base64 plist decoding