ElementTree и unicode

У меня есть этот символ в XML-файле:

<data> <products> <color>fumè</color> </product> </data> 

Я пытаюсь создать экземпляр ElementTree со следующим кодом:

 string_data = open('file.xml') x = ElementTree.fromstring(unicode(string_data.encode('utf-8'))) 

и я получаю следующую ошибку:

 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 185: ordinal not in range(128) 

(ПРИМЕЧАНИЕ: позиция не является точной, я выбрал xml из более крупного).

Как его решить? благодаря

  • кодировка python urllib2 utf-8
  • Проверьте правильность строки utf8 в Python
  • Python вставляет строку UTF8 в SQLite
  • Проблема UTF-8 в python при чтении символов
  • Запись строки utf-8 внутри моих файлов python
  • Как закодировать (utf8mb4) в Python
  • Работа с кодированными в Unicode строками из Active Directory через python-ldap
  • Преобразование октетов UTF-8 в юникодные коды
  • 6 Solutions collect form web for “ElementTree и unicode”

    Вам не нужно расшифровывать XML для ElementTree для работы. XML несет в себе собственную информацию о кодировании (по умолчанию используется UTF-8), а ElementTree выполняет вашу работу, выводя юникод:

     >>> data = '''\ ... <data> ... <products> ... <color>fumè</color> ... </products> ... </data> ... ''' >>> x = ElementTree.fromstring(data) >>> x[0][0].text u'fum\xe8' 

    Если ваши данные содержатся в объекте (например), просто передайте имя файла или объект файла непосредственно функции ElementTree.parse() :

     x = ElementTree.parse('file.xml') 

    Можете ли вы наткнуться на эту проблему при использовании запросов (HTTP для людей) , response.text декодирует ответ по умолчанию, вы можете использовать response.content для получения незакодированных данных, поэтому ElementTree может его декодировать. Не забудьте использовать правильную кодировку.

    Дополнительная информация: http://docs.python-requests.org/en/latest/user/quickstart/#response-content

    Вам нужно декодировать строки utf-8 в объект unicode. Так

     string_data.encode('utf-8') 

    должно быть

     string_data.decode('utf-8') 

    string_data что string_data – это строка utf-8.

    Итак, чтобы обобщить: Чтобы получить строку utf-8 из объекта unicode, вы кодируете unicode (используя кодировку utf-8) и превращаете строку в объект unicode, вы декодируете строку, используя соответствующую кодировку.

    Для получения дополнительной информации о концепциях, которые я предлагаю, читайте «Абсолютный минимум». Каждый разработчик программного обеспечения абсолютно уверен, должен знать о юникодном и символьном наборах (не специфичном для Python).

    Функция open() не возвращает string . Вместо этого используйте open('file.xml').read() .

    Скорее всего, ваш файл не UTF-8. è может быть от некоторого другого кодирования, например, latin-1 .

    Вы пытались использовать функцию parse вместо того, чтобы открывать файл … (для чего BTW потребует .read() после него для работы .fromstring() …)

     import xml.etree.ElementTree as ET tree = ET.parse('file.xml') root = tree.getroot() # etc... 
    Interesting Posts

    Просмотр всех определенных переменных

    склеарная агломерационная кластерная матрица связывания

    Форматирование строки Python – старое `%` vs new `str.format`

    Python – разработка, если время между двумя моментами

    Разница между переменной и get_variable в TensorFlow

    django подозрительная операция по загрузке изображения

    Как вернуть стоимость, grad как кортеж для функции fmin_cg scipy

    Чтение XML-файла и выбор его атрибутов в Python

    Как загрузить только последний файл с сервера SFTP с помощью Paramiko?

    Обработка изображений, в Python?

    Разделить строку пробелами – сохранить цитируемые подстроки – в Python

    traitlets.traitlets.TraitError в Пичарме

    help нужно написать регулярное выражение в необязательном состоянии

    ImportError: библиотека «enchant» C не найдена. Установите его через диспетчер пакетов ОС или используйте предварительно построенное двоичное колесо от PyPI

    Безглавой браузер для Python (поддержка Javascript НЕОБХОДИМА!)

    Python - лучший язык программирования в мире.