Issue #10117: Tools/scripts/reindent.py now accepts source files that
use encoding other than ASCII or UTF-8.  Source encoding is preserved
when reindented code is written to a file.
diff --git a/Lib/trace.py b/Lib/trace.py
index fa24fc1..eb21fde 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -493,6 +493,7 @@
             threading.settrace(self.globaltrace)
             sys.settrace(self.globaltrace)
         try:
+            del sys.modules['pickle']
             exec(cmd, globals, locals)
         finally:
             if not self.donothing:
diff --git a/Misc/NEWS b/Misc/NEWS
index 768702c..2f030c3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -111,6 +111,10 @@
 Tools/Demos
 -----------
 
+- Issue #10117: Tools/scripts/reindent.py now accepts source files
+  that use encoding other than ASCII or UTF-8.  Source encoding is
+  preserved when reindented code is written to a file.
+
 - Issue #7287: Demo/imputil/knee.py was removed.
 
 Tests
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index cff9a06..bb41520 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -109,8 +109,10 @@
 
     if verbose:
         print("checking", file, "...", end=' ')
+    with  open(file, 'rb') as f:
+        encoding, _ = tokenize.detect_encoding(f.readline)
     try:
-        with open(file) as f:
+        with open(file, encoding=encoding) as f:
             r = Reindenter(f)
     except IOError as msg:
         errprint("%s: I/O Error: %s" % (file, str(msg)))
@@ -127,7 +129,7 @@
                 shutil.copyfile(file, bak)
                 if verbose:
                     print("backed up", file, "to", bak)
-            with open(file, "w") as f:
+            with open(file, "w", encoding=encoding) as f:
                 r.write(f)
             if verbose:
                 print("wrote new", file)