diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py
index 71c0163..1b7bfc1 100644
--- a/Lib/idlelib/IOBinding.py
+++ b/Lib/idlelib/IOBinding.py
@@ -7,7 +7,7 @@
 import tkinter.messagebox as tkMessageBox
 import re
 from tkinter import *
-from tkinter.simpledialog import SimpleDialog
+from tkinter.simpledialog import askstring
 
 from idlelib.configHandler import idleConf
 
@@ -211,7 +211,7 @@
         except IOError as msg:
             tkMessageBox.showerror("I/O Error", str(msg), master=self.text)
             return False
-        chars = self._decode(two_lines, bytes)
+        chars, converted = self._decode(two_lines, bytes)
         if chars is None:
             tkMessageBox.showerror("Decoding Error",
                                    "File %s\nFailed to Decode" % filename,
@@ -227,6 +227,10 @@
         self.text.insert("1.0", chars)
         self.reset_undo()
         self.set_filename(filename)
+        if converted:
+            # We need to save the conversion results first
+            # before being able to execute the code
+            self.set_saved(False)
         self.text.mark_set("insert", "1.0")
         self.text.see("insert")
         self.updaterecentfileslist(filename)
@@ -241,11 +245,11 @@
                 chars = bytes[3:].decode("utf-8")
             except UnicodeDecodeError:
                 # has UTF-8 signature, but fails to decode...
-                return None
+                return None, False
             else:
                 # Indicates that this file originally had a BOM
                 self.fileencoding = 'BOM'
-                return chars
+                return chars, False
         # Next look for coding specification
         try:
             enc = coding_spec(two_lines)
@@ -257,36 +261,48 @@
                 master = self.text)
             enc = None
         except UnicodeDecodeError:
-            return None
+            return None, False
         if enc:
             try:
                 chars = str(bytes, enc)
                 self.fileencoding = enc
-                return chars
+                return chars, False
             except UnicodeDecodeError:
                 pass
         # Try ascii:
         try:
             chars = str(bytes, 'ascii')
             self.fileencoding = None
-            return chars
+            return chars, False
         except UnicodeDecodeError:
             pass
         # Try utf-8:
         try:
             chars = str(bytes, 'utf-8')
             self.fileencoding = 'utf-8'
-            return chars
+            return chars, False
         except UnicodeDecodeError:
             pass
         # Finally, try the locale's encoding. This is deprecated;
         # the user should declare a non-ASCII encoding
         try:
-            chars = str(bytes, locale_encoding)
-            self.fileencoding = locale_encoding
-        except UnicodeDecodeError:
+            # Wait for the editor window to appear
+            self.editwin.text.update()
+            enc = askstring(
+                "Specify file encoding",
+                "The file's encoding is invalid for Python 3.x.\n"
+                "IDLE will convert it to UTF-8.\n"
+                "What is the current encoding of the file?",
+                initialvalue = locale_encoding,
+                parent = self.editwin.text)
+
+            if enc:
+                chars = str(bytes, enc)
+                self.fileencoding = None
+            return chars, True
+        except (UnicodeDecodeError, LookupError):
             pass
-        return chars  # None on failure
+        return None, False  # None on failure
 
     def maybesave(self):
         if self.get_saved():
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 94ab7f7..3279299 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@
 
 *Release date: XX-XXX-XXXX*
 
+- Issue #4815: Offer conversion to UTF-8 if source files have
+  no encoding declaration and are not encoded in UTF-8.
+
 - Issue #4008: Fix problems with non-ASCII source files.
 
 - Issue #4323: Always encode source as UTF-8 without asking
