Почему ElementTree отклоняет объявления XML UTF-16 с «неправильной кодировкой»?

В Python 2.7 при передаче строки Unicode в ElementTreefromstring() метод, который имеетencoding="UTF-16" в объявлении XML я получаю ParseError, говорящий о том, что указанная кодировка неверна:

>>> from xml.etree import ElementTree
>>> data = u'<?xml version="1.0" encoding="utf-16"?><root/>'
>>> ElementTree.fromstring(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1300, in XML
    parser.feed(text)
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1642, in feed
    self._raiseerror(v)
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: encoding specified in XML declaration is incorrect: line 1, column 30

Что это значит? Что заставляет ElementTree так думать?

В конце концов, я передаю кодовые точки Unicode, а не байтовую строку. Здесь нет никакой кодировки. Как это может быть неправильно?

Конечно, можно утверждать, что любая кодировка является неправильной, поскольку эти кодовые точки Unicode не кодируются. Однако тогда почему UTF-8 не отклоняется как «неправильная кодировка»?

>>> ElementTree.fromstring(u'<?xml version="1.0" encoding="utf-8"?><root/>')

Я могу легко решить эту проблему, либо зашифровав строку в кодировке Unicode в строку байтов в кодировке UTF-16, и передав ееfromstring() или заменивencoding="utf-16" сencoding="utf-8" в строке Unicode, но я хотел бы понять, почему возникает это исключение.документация ElementTree ничего не говорит только о принятии байтовых строк.

В частности, я хотел бы избежать этих дополнительных операций, потому что мои входные данные могут стать довольно большими, и я бы хотел, чтобы они не были дважды в памяти и нагрузка на процессор при их обработке более чем абсолютно необходима.

Ответы на вопрос(1)

Ваш ответ на вопрос