Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2022-02-01.11:00:34.033>labels= ['library', '3.10', '3.11']
title='ElementTree: wrong XML prolog for the utf-8-sig encoding'updated_at=<Date2022-02-01.16:40:13.781>user='https://github.com/pepr'
When ElementTree object is to be written to the file, and when BOM is needed, the 'utf-8-sig' can be used for the purpose. However, the XML prolog then looks like...
\<?xml version='1.0' encoding='utf-8-sig'?\>
... and that encoding in the prolog makes no sense. Therefore,
the utf-8-sig is changed to utf-8 for the purpose.
To fix the situation, the following two lines should be added to
cpython/Lib/xml/etree/ElementTree.py
Activity
pepr commented on Feb 1, 2022
When ElementTree object is to be written to the file, and when BOM is needed, the 'utf-8-sig' can be used for the purpose. However, the XML prolog then looks like...
... and that encoding in the prolog makes no sense. Therefore,
the utf-8-sig is changed to utf-8 for the purpose.
To fix the situation, the following two lines should be added to
cpython/Lib/xml/etree/ElementTree.py
elif enc_lower == "utf-8-sig": declared_encoding = "utf-8"
just above the line 741 that says
write("<?xml version='1.0' encoding='%s'?>\n" % ( declared_encoding,))
I have already cloned the main branch, added the lines to https://github.com/pepr/cpython.git, and sent pull request.
I have tested the functionality locally with Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
gh-90756: Fix the ElementTree XML declaration for utf-8-sig (GH-31043)
pythongh-90756: Fix the ElementTree XML declaration for utf-8-sig (py…