Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd7db9dc

Browse files
gh-91810: Fix regression with writing an XML declaration with encoding='unicode' (GH-93426)
Suppress writing an XML declaration in open files in ElementTree.write()with encoding='unicode' and xml_declaration=None.If file patch is passed to ElementTree.write() with encoding='unicode',always open a new file in UTF-8.
1 parent8352e32 commitd7db9dc

File tree

3 files changed

+10
-20
lines changed

3 files changed

+10
-20
lines changed

‎Lib/test/test_xml_etree.py‎

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3739,13 +3739,7 @@ def test_write_to_filename_as_unicode(self):
37393739
tree=ET.ElementTree(ET.XML('''<site>\xf8</site>'''))
37403740
tree.write(TESTFN,encoding='unicode')
37413741
withopen(TESTFN,'rb')asf:
3742-
data=f.read()
3743-
expected="<site>\xf8</site>".encode(encoding,'xmlcharrefreplace')
3744-
ifencoding.lower()in ('utf-8','ascii'):
3745-
self.assertEqual(data,expected)
3746-
else:
3747-
self.assertIn(b"<?xml version='1.0' encoding=",data)
3748-
self.assertIn(expected,data)
3742+
self.assertEqual(f.read(),b"<site>\xc3\xb8</site>")
37493743

37503744
deftest_write_to_text_file(self):
37513745
self.addCleanup(os_helper.unlink,TESTFN)
@@ -3760,17 +3754,13 @@ def test_write_to_text_file(self):
37603754
tree.write(f,encoding='unicode')
37613755
self.assertFalse(f.closed)
37623756
withopen(TESTFN,'rb')asf:
3763-
self.assertEqual(f.read(),convlinesep(
3764-
b'''<?xml version='1.0' encoding='ascii'?>\n'''
3765-
b'''<site>&#248;</site>'''))
3757+
self.assertEqual(f.read(),b'''<site>&#248;</site>''')
37663758

37673759
withopen(TESTFN,'w',encoding='ISO-8859-1')asf:
37683760
tree.write(f,encoding='unicode')
37693761
self.assertFalse(f.closed)
37703762
withopen(TESTFN,'rb')asf:
3771-
self.assertEqual(f.read(),convlinesep(
3772-
b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n'''
3773-
b'''<site>\xf8</site>'''))
3763+
self.assertEqual(f.read(),b'''<site>\xf8</site>''')
37743764

37753765
deftest_write_to_binary_file(self):
37763766
self.addCleanup(os_helper.unlink,TESTFN)

‎Lib/xml/etree/ElementTree.py‎

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ def write(self, file_or_filename,
731731
with_get_writer(file_or_filename,encoding)as (write,declared_encoding):
732732
ifmethod=="xml"and (xml_declarationor
733733
(xml_declarationisNoneand
734+
encoding.lower()!="unicode"and
734735
declared_encoding.lower()notin ("utf-8","us-ascii"))):
735736
write("<?xml version='1.0' encoding='%s'?>\n"% (
736737
declared_encoding,))
@@ -757,13 +758,10 @@ def _get_writer(file_or_filename, encoding):
757758
exceptAttributeError:
758759
# file_or_filename is a file name
759760
ifencoding.lower()=="unicode":
760-
file=open(file_or_filename,"w",
761-
errors="xmlcharrefreplace")
762-
else:
763-
file=open(file_or_filename,"w",encoding=encoding,
764-
errors="xmlcharrefreplace")
765-
withfile:
766-
yieldfile.write,file.encoding
761+
encoding="utf-8"
762+
withopen(file_or_filename,"w",encoding=encoding,
763+
errors="xmlcharrefreplace")asfile:
764+
yieldfile.write,encoding
767765
else:
768766
# file_or_filename is a file-like object
769767
# encoding determines if it is a text or binary writer
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Suppress writing an XML declaration in open files in ``ElementTree.write()``
2+
with ``encoding='unicode'`` and ``xml_declaration=None``.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp