1. Don't encode input strings to bytes.
2. Re-enable stderr redirection.
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 6ec6251..3f9f567 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -827,7 +827,7 @@
         self.console = PseudoFile(self, "console", IOBinding.encoding)
         if not use_subprocess:
             sys.stdout = self.stdout
-###            sys.stderr = self.stderr # Don't redirect exceptions, pyshell NG
+            sys.stderr = self.stderr
             sys.stdin = self
         #
         self.history = self.History(self.text)
@@ -991,12 +991,6 @@
         line = self.text.get("iomark", "end-1c")
         if len(line) == 0:  # may be EOF if we quit our mainloop with Ctrl-C
             line = "\n"
-        if isinstance(line, str):
-            from idlelib import IOBinding
-            try:
-                line = line.encode(IOBinding.encoding)
-            except UnicodeError:
-                pass
         self.resetoutput()
         if self.canceled:
             self.canceled = 0