Por que o ElementTree rejeita declarações XML UTF-16 com "codificação incorreta"?

No Python 2.7, ao passar uma string unicode para o ElementTreefromstring() método que possuiencoding="UTF-16" na declaração XML, estou recebendo um ParseError dizendo que a codificação especificada está incorreta:

>>> 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

O que isso significa? O que faz o ElementTree pensar isso?

Afinal, estou passando pontos de código unicode, não uma string de bytes. Não há codificação envolvida aqui. Como isso pode estar incorreto?

Obviamente, alguém poderia argumentar que qualquer codificação está incorreta, pois esses pontos de código unicode não são codificados. No entanto, por que o UTF-8 não é rejeitado como "codificação incorreta"?

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

Posso resolver esse problema facilmente, codificando a cadeia unicode em uma cadeia de bytes codificada em UTF-16 e passando isso parafromstring() ou substituindoencoding="utf-16" comencoding="utf-8" na cadeia unicode, mas eu gostaria de entender por que essa exceção é gerada. odocumentação do ElementTree não diz nada sobre apenas aceitar cadeias de bytes.

Especificamente, eu gostaria de evitar essas operações adicionais porque meus dados de entrada podem ficar muito grandes e eu gostaria de evitar tê-los duas vezes na memória e a sobrecarga da CPU de processá-los mais do que o absolutamente necessário.

questionAnswers(1)

yourAnswerToTheQuestion