抱歉,如果这是重复的或非常明显的东西,但请多多包涵,因为我是 Python 新手。我正在尝试使用 cElementTree (Python 2.7.5) 来解析 Applescript 中的 XML 文件。XML 文件包含一些非 ASCII 文本编码为实体的字段,例如<foo>café</foo>
.
在终端中运行以下基本代码会按预期输出成对的标签和标签内容:
import xml.etree.cElementTree as etree
parser = etree.XMLParser(encoding="utf-8")
tree = etree.parse("myfile.xml", parser=parser)
root = tree.getroot()
for child in root:
print child.tag, child.text
但是当我在 Applescript 中使用 运行相同的代码时do shell script
,我得到了可怕的UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 10: ordinal not in range(128)。
我发现如果我将print
线路更改为
print [child.tag, child.text]
然后我确实得到了一个包含在 [''] 中的 XML 标记/值对的字符串,但是任何非 ASCII 字符都会作为文字 Unicode 字符串传递到 Applescript(所以我以 结尾u'caf\\xe9'
)。
我尝试了几件事,包括 a.) 将 .xml 文件读入字符串并使用 .fromstring 而不是 .parse,b.) 尝试将 .xml 文件转换为 str,然后再将其导入 cElementTree,c.) 只是在任何我能找到的地方粘贴 .encode 以查看是否可以避免使用 ASCII 编解码器,但还没有解决方案。不幸的是,我被困在使用 Applescript 作为容器。提前感谢您的建议!