https://github.com/python/cpython/commit/de0d9763682b414c028b3443aeab60fe2daec645
commit: de0d9763682b414c028b3443aeab60fe2daec645
branch: main
author: tonghuaroot (童话) <[email protected]>
committer: terryjreedy <[email protected]>
date: 2026-09-20T17:04:01-04:00
summary:

gh-153319: Read turtledemo scripts with the source file's own encoding (#153321)


The demo viewer read each script with open() and no encoding argument, i.e. the 
locale default encoding. That emits an EncodingWarning under -X 
warn_default_encoding and can mis-decode a script on a non-UTF-8 locale. Read 
the source with tokenize.open() instead, which decodes using the encoding 
detected from the file (its coding cookie, else UTF-8), matching how Python 
read the module when it was imported just above.

* gh-153319: Read turtledemo scripts as UTF-8

Per review, open the demo scripts with encoding='utf-8' instead of
tokenize.open(); the scripts are UTF-8.

---------

Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Terry Jan Reedy <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-07-08-19-40-00.gh-issue-153319.Qk7bE2.rst
M Lib/turtledemo/__main__.py

diff --git a/Lib/turtledemo/__main__.py b/Lib/turtledemo/__main__.py
index 7c2d753f4c31113..cffc08f59b99d26 100644
--- a/Lib/turtledemo/__main__.py
+++ b/Lib/turtledemo/__main__.py
@@ -333,7 +333,7 @@ def loadfile(self, filename):
         modname = 'turtledemo.' + filename
         __import__(modname)
         self.module = sys.modules[modname]
-        with open(self.module.__file__, 'r') as f:
+        with open(self.module.__file__, encoding='utf-8') as f:
             chars = f.read()
         self.text.delete("1.0", "end")
         self.text.insert("1.0", chars)
diff --git 
a/Misc/NEWS.d/next/Library/2026-07-08-19-40-00.gh-issue-153319.Qk7bE2.rst 
b/Misc/NEWS.d/next/Library/2026-07-08-19-40-00.gh-issue-153319.Qk7bE2.rst
new file mode 100644
index 000000000000000..95f8e2fb7f4f8be
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-08-19-40-00.gh-issue-153319.Qk7bE2.rst
@@ -0,0 +1,2 @@
+The :mod:`turtledemo` viewer now reads each demo script as UTF-8 instead of
+the locale encoding.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to