¿Por qué ElementTree rechaza las declaraciones XML UTF-16 con "codificación incorrecta"?

En Python 2.7, al pasar una cadena Unicode a ElementTree'sfromstring() método que tieneencoding="UTF-16" en la declaración XML, recibo un ParseError que dice que la codificación especificada es incorrecta:

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

Qué significa eso? ¿Qué hace que ElementTree piense así?

Después de todo, estoy pasando puntos de código unicode, no una cadena de bytes. No hay codificación involucrada aquí. ¿Cómo puede ser incorrecto?

Por supuesto, uno podría argumentar que cualquier codificación es incorrecta, ya que estos puntos de código unicode no están codificados. Sin embargo, ¿por qué UTF-8 no se rechaza como "codificación incorrecta"?

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

Puedo resolver este problema fácilmente ya sea codificando la cadena Unicode en una cadena de bytes codificada en UTF-16 y pasándola afromstring() o reemplazandoencoding="utf-16" conencoding="utf-8" en la cadena unicode, pero me gustaría entender por qué se genera esa excepción. losdocumentación de ElementTree no dice nada sobre solo aceptar cadenas de bytes.

Específicamente, me gustaría evitar estas operaciones adicionales porque mis datos de entrada pueden ser bastante grandes y me gustaría evitar tenerlos dos veces en la memoria y la sobrecarga de la CPU de procesarlos más de lo absolutamente necesario.

Respuestas a la pregunta(1)

Su respuesta a la pregunta