diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2020-06-30 00:18:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-30 00:18:22 (GMT) |
commit | 2515a28230b1a011205f30263da6b01c6bd167a3 (patch) | |
tree | 1553cd5aba21acc96c84d79d0c462b248dcc6b35 | |
parent | dd8a93e23b5c4f9290e1cea6183d97eb9b5e61c0 (diff) | |
download | cpython-2515a28230b1a011205f30263da6b01c6bd167a3.zip cpython-2515a28230b1a011205f30263da6b01c6bd167a3.tar.gz cpython-2515a28230b1a011205f30263da6b01c6bd167a3.tar.bz2 |
bpo-41152: IDLE: always use UTF-8 for standard IO streams (GH-21214)
-rw-r--r-- | Lib/idlelib/NEWS.txt | 3 | ||||
-rw-r--r-- | Lib/idlelib/idle_test/test_outwin.py | 5 | ||||
-rw-r--r-- | Lib/idlelib/iomenu.py | 48 | ||||
-rw-r--r-- | Lib/idlelib/outwin.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/IDLE/2020-06-29-14-51-15.bpo-41152.d6mV0C.rst | 2 |
5 files changed, 10 insertions, 52 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index c270fcb..7ae29af 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,9 @@ Released on 2020-10-05? ====================================== +bpo-41152: The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE +is now always UTF-8. + bpo-41144: Make Open Module open a special module such as os.path. bpo-40723: Make test_idle pass when run after import. diff --git a/Lib/idlelib/idle_test/test_outwin.py b/Lib/idlelib/idle_test/test_outwin.py index cd099ec..e347bfc 100644 --- a/Lib/idlelib/idle_test/test_outwin.py +++ b/Lib/idlelib/idle_test/test_outwin.py @@ -58,11 +58,6 @@ class OutputWindowTest(unittest.TestCase): get = self.text.get write = self.window.write - # Test bytes. - b = b'Test bytes.' - eq(write(b), len(b)) - eq(get('1.0', '1.end'), b.decode()) - # No new line - insert stays on same line. delete('1.0', 'end') test_text = 'test text' diff --git a/Lib/idlelib/iomenu.py b/Lib/idlelib/iomenu.py index 4b2833b..7f3f656 100644 --- a/Lib/idlelib/iomenu.py +++ b/Lib/idlelib/iomenu.py @@ -13,52 +13,12 @@ from tkinter.simpledialog import askstring import idlelib from idlelib.config import idleConf -if idlelib.testing: # Set True by test.test_idle to avoid setlocale. - encoding = 'utf-8' - errors = 'surrogateescape' +encoding = 'utf-8' +if sys.platform == 'win32': + errors = 'surrogatepass' else: - # Try setting the locale, so that we can find out - # what encoding to use - try: - import locale - locale.setlocale(locale.LC_CTYPE, "") - except (ImportError, locale.Error): - pass - - if sys.platform == 'win32': - encoding = 'utf-8' - errors = 'surrogateescape' - else: - try: - # Different things can fail here: the locale module may not be - # loaded, it may not offer nl_langinfo, or CODESET, or the - # resulting codeset may be unknown to Python. We ignore all - # these problems, falling back to ASCII - locale_encoding = locale.nl_langinfo(locale.CODESET) - if locale_encoding: - codecs.lookup(locale_encoding) - except (NameError, AttributeError, LookupError): - # Try getdefaultlocale: it parses environment variables, - # which may give a clue. Unfortunately, getdefaultlocale has - # bugs that can cause ValueError. - try: - locale_encoding = locale.getdefaultlocale()[1] - if locale_encoding: - codecs.lookup(locale_encoding) - except (ValueError, LookupError): - pass + errors = 'surrogateescape' - if locale_encoding: - encoding = locale_encoding.lower() - errors = 'strict' - else: - # POSIX locale or macOS - encoding = 'ascii' - errors = 'surrogateescape' - # Encoding is used in multiple files; locale_encoding nowhere. - # The only use of 'encoding' below is in _decode as initial value - # of deprecated block asking user for encoding. - # Perhaps use elsewhere should be reviewed. coding_re = re.compile(r'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)', re.ASCII) blank_re = re.compile(r'^[ \t\f]*(?:[#\r\n]|$)', re.ASCII) diff --git a/Lib/idlelib/outwin.py b/Lib/idlelib/outwin.py index 90272b6..5ab08bb 100644 --- a/Lib/idlelib/outwin.py +++ b/Lib/idlelib/outwin.py @@ -6,7 +6,6 @@ import re from tkinter import messagebox from idlelib.editor import EditorWindow -from idlelib import iomenu file_line_pats = [ @@ -110,8 +109,7 @@ class OutputWindow(EditorWindow): Return: Length of text inserted. """ - if isinstance(s, bytes): - s = s.decode(iomenu.encoding, "replace") + assert isinstance(s, str) self.text.insert(mark, s, tags) self.text.see(mark) self.text.update() diff --git a/Misc/NEWS.d/next/IDLE/2020-06-29-14-51-15.bpo-41152.d6mV0C.rst b/Misc/NEWS.d/next/IDLE/2020-06-29-14-51-15.bpo-41152.d6mV0C.rst new file mode 100644 index 0000000..434be10 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2020-06-29-14-51-15.bpo-41152.d6mV0C.rst @@ -0,0 +1,2 @@ +The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE is now always +UTF-8. |