Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Lib/idlelib/NEWS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
5 changes: 0 additions & 5 deletions Lib/idlelib/idle_test/test_outwin.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,6 @@ def test_write(self):
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'
Expand Down
48 changes: 4 additions & 44 deletions Lib/idlelib/iomenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,52 +13,12 @@
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)
Expand Down
4 changes: 1 addition & 3 deletions Lib/idlelib/outwin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from tkinter import messagebox

from idlelib.editor import EditorWindow
from idlelib import iomenu


file_line_pats = [
Expand Down Expand Up @@ -110,8 +109,7 @@ def write(self, s, tags=(), mark="insert"):
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()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE is now always
UTF-8.