#
# @param href Resource reference.
# @param parse Parse mode. Either "xml" or "text".
-# @param encoding Optional text encoding.
+# @param encoding Optional text encoding (UTF-8 by default for "text").
# @return The expanded resource. If the parse mode is "xml", this
# is an ElementTree instance. If the parse mode is "text", this
# is a Unicode string. If the loader fails, it can return None
# @throws IOError If the loader fails to load the resource.
def default_loader(href, parse, encoding=None):
- file = open(href)
if parse == "xml":
+ file = open(href, 'rb')
data = ElementTree.parse(file).getroot()
else:
+ if not encoding:
+ encoding = 'UTF-8'
+ file = open(href, 'r', encoding=encoding)
data = file.read()
- if encoding:
- data = data.decode(encoding)
file.close()
return data
Library
-------
+- Issue #12451: The XInclude default loader of xml.etree now decodes files from
+ UTF-8 instead of the locale encoding if the encoding is not specified. It now
+ also opens XML files for the parser in binary mode instead of the text mode
+ to avoid encoding issues.
+
- Issue #12451: doctest.debug_script() doesn't create a temporary file
anymore to avoid encoding issues.