我不确定我的问题是我的编程还是Apple的iTunes库导出问题,但我将首先假设它是我的编程。
我正在尝试解析从iTunes导出的XML库。解析的片段只是:
def parse_tree(source):
parser = ET.iterparse(source)
for action, elem in parser:
# ...
导出我的库时,iTunes上的文件失败,错误:UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 886: character maps to <undefined>
XML标头是<?xml version="1.0" encoding="UTF-8"?>
,XML的违规片段似乎是:
<key>Name</key><string>Part 2. The Death Of Enkidu. Skon Přitele Mého Mne Zdeptal Težče</string>
这可以通过iTunes,oXygen XML编辑器和我看到的Stack Overflow来呈现。但是HxD十六进制编辑器确实显示了0x8D,并在UTF-8中将其标记为未定义。 hex的相关位似乎是:
6C 20 54 65 C5 BE C4 8D 65 3C 2F 73 74 72 69 6E
这个iTunes是不是导出有效的UTF-8,Python的EventTree没有正确处理它,或者我做错了什么?如何让它读取元素的其余部分,跳过无法读取的字符或用缺省字符(例如问号)替换它?
编辑:操作系统是Windows 10.该文件是使用iTunes导出库命令直接创建的。