我知道每个人都厌倦了编码问题,但我无法弄清楚这一点。Python搞砸了斯堪的纳维亚字符(Ö - >Ã)
我从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)
哦,但从结果的外观来看,只需打印出UTF-8的字节表示即可。 – schlenk 2012-03-27 19:14:17
“许多”是有点滑稽。 stdlib有一些众所周知的问题,有些人知道如何使用外部软件包。 – 2012-03-27 19:16:14
我已经添加了我的完整代码,谢谢你们的帮助。 – 2012-03-27 19:27:43