Python портит скандинавские символы (Ö -> Ã) - PullRequest
0 голосов
/ 27 марта 2012

Я знаю, что всем надоели вопросы по кодированию, но я не могу понять это.

Я получаю данные из XML-файла (API) в Python.Все хорошо, но когда я печатаю значения, которые содержат скандинавские символы, такие как Ö или Ä, они портятся:

Ö -> Ã
Ä -> ä

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 голосов
/ 28 марта 2012

При вызове "etree.iterparse" попробуйте заполнить значение кодировки:

context = etree.iterparse(StringIO(data), tag='movie', encoding="utf-8")

Из документации itree.iterparse: "" "| Другие аргументы ключевого слова: | - encoding: переопределитькодировка документа | - схема: XMLSchema для проверки по "" "

Еще лучше - забудьте, что:

Я скачал ваш файл и поиграл - кажется, он работает, по крайней мередля первого фильма - может быть, у вас есть плохо закодированные символы в самом файле?Это либо так, либо все в порядке, и беспорядок только в вашем заявлении на печать - попробуйте использовать "print name.encode("utf-8")" - или правильную кодировку вашего терминала, вместо того, чтобы позволить python попытаться угадать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...