如果这是重复的或者非常明显的事情,请道歉,但请耐心等待我,因为我是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
但是当我使用do shell script
在Applescript中运行相同的代码时,我得到了可怕的 UnicodeEncodeError:'ascii'编解码器无法对位置10中的字符u'\ xe9'进行编码:序数不在范围(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作为容器。提前感谢您的建议!
答案 0 :(得分:0)
您需要encode至少child.text
到Applescript可以处理的内容。如果您想要返回字符实体,则可以执行此操作:
print child.tag.encode('ascii', 'xmlcharrefreplace'), child.text.encode('ascii', 'xmlcharrefreplace')
或者它是否可以处理类似utf-8的内容:
print child.tag.encode('utf-8'), child.text.encode('utf-8')
答案 1 :(得分:0)
不是AppleScript的错 - 通过猜测你使用什么输出编码,Python是“有用的”。 (不幸的是,根据终端是否连接,它会有不同的猜测。)
最简单的解决方案(Python 2.6+)是在调用PYTHONIOENCODING
之前设置python
环境变量:
do shell script "export PYTHONIOENCODING=UTF-8; /usr/bin/python '/path/to/script.py'"
或:
do shell script "export PYTHONIOENCODING=UTF-8; /usr/bin/python << EOF
# -*- coding: utf-8 -*-
# your Python code goes here...
print u'A Møøse once bit my sister ...'
EOF"