Python弄乱了斯堪的纳维亚人物(Ö - >Ã)

时间:2012-03-27 19:11:51

标签: python encoding character-encoding

我知道每个人都厌倦了编码问题,但我无法弄明白。

我从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)

1 个答案:

答案 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尝试猜测它。