(merge 3.2) 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.
This commit is contained in:
Victor Stinner 2011-06-30 18:11:18 +02:00
commit 3909da7fca
2 changed files with 10 additions and 4 deletions

View File

@ -67,7 +67,7 @@ class FatalIncludeError(SyntaxError):
# #
# @param href Resource reference. # @param href Resource reference.
# @param parse Parse mode. Either "xml" or "text". # @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 # @return The expanded resource. If the parse mode is "xml", this
# is an ElementTree instance. If the parse mode is "text", this # is an ElementTree instance. If the parse mode is "text", this
# is a Unicode string. If the loader fails, it can return None # is a Unicode string. If the loader fails, it can return None
@ -75,13 +75,14 @@ class FatalIncludeError(SyntaxError):
# @throws IOError If the loader fails to load the resource. # @throws IOError If the loader fails to load the resource.
def default_loader(href, parse, encoding=None): def default_loader(href, parse, encoding=None):
file = open(href)
if parse == "xml": if parse == "xml":
file = open(href, 'rb')
data = ElementTree.parse(file).getroot() data = ElementTree.parse(file).getroot()
else: else:
if not encoding:
encoding = 'UTF-8'
file = open(href, 'r', encoding=encoding)
data = file.read() data = file.read()
if encoding:
data = data.decode(encoding)
file.close() file.close()
return data return data

View File

@ -200,6 +200,11 @@ Core and Builtins
Library 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 - Issue #12451: doctest.debug_script() doesn't create a temporary file
anymore to avoid encoding issues. anymore to avoid encoding issues.