我知道每个人都厌倦了编码问题,但我无法弄明白。
我从Python中获取XML文件(API)中的数据。一切都很好,但是当我打印包含斯堪的纳维亚字符的值时,例如Ö
或Ä
,它们会搞砸:
Ö -> Ã
Ä -> ä
XML文档以UTF-8编码。
这是我的代码。很抱歉给您带来不便。
# Get the data
from urllib2 import urlopen
ur = urlopen("http://www.leffatykki.com/xml/leffat")
data = ur.read()
# Replace ampersands (triggers an error)
data = data.replace('&', '&')
# Loop XML
from lxml import etree
from cStringIO import StringIO
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
try:
name = elem.xpath('name/text( )')[0]
year = elem.xpath('year/text( )')[0]
print name
except IndexError:
temp = '...'
context = etree.iterparse(StringIO(data), tag='movie')
fast_iter(context, process_element)
答案 0 :(得分:0)
在您对“etree.iterparse”的调用中,请尝试填写编码值:
context = etree.iterparse(StringIO(data), tag='movie', encoding="utf-8")
来自itree.iterparse文档: “”” |其他关键字参数: | - encoding:覆盖文档编码 | - schema:要验证的XMLSchema “”“
更好 - 忘了:
我已经下载了你的文件并玩了 - 它似乎正在工作,至少对于第一部电影而言 - 也许你在文件中编码了很糟糕的字符?它或者是taht或者一切都很好,而且只是在你的打印声明中 -
尝试使用“print name.encode("utf-8")
” - 或者终端的正确编码,而不是让python尝试猜测它。