diff --git a/Lib/trace.py b/Lib/trace.py
index a272683..9ce240f 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -48,6 +48,7 @@
   r.write_results(show_missing=True, coverdir="/tmp")
 """
 
+import io
 import linecache
 import os
 import re
@@ -224,6 +225,13 @@
                 print(("Skipping counts file %r: %s"
                                       % (self.infile, err)), file=sys.stderr)
 
+    def is_ignored_filename(self, filename):
+        """Return True if the filename does not refer to a file
+        we want to have reported.
+        """
+        return (filename == "<string>" or
+                filename.startswith("<doctest "))
+
     def update(self, other):
         """Merge in the data from another CoverageResults"""
         counts = self.counts
@@ -257,7 +265,8 @@
             print()
             print("calling relationships:")
             lastfile = lastcfile = ""
-            for ((pfile, pmod, pfunc), (cfile, cmod, cfunc)) in sorted(self.callers.keys()):
+            for ((pfile, pmod, pfunc), (cfile, cmod, cfunc)) \
+                    in sorted(self.callers.keys()):
                 if pfile != lastfile:
                     print()
                     print("***", pfile, "***")
@@ -279,10 +288,7 @@
         sums = {}
 
         for filename, count in per_file.items():
-            # skip some "files" we don't care about...
-            if filename == "<string>":
-                continue
-            if filename.startswith("<doctest "):
+            if self.is_ignored_filename(filename):
                 continue
 
             if filename.endswith((".pyc", ".pyo")):
@@ -391,7 +397,7 @@
             linenos.update(find_lines(c, strs))
     return linenos
 
-def find_strings(filename):
+def find_strings(filename, encoding=None):
     """Return a dict of possible docstring positions.
 
     The dict maps line numbers to strings.  There is an entry for
@@ -402,7 +408,7 @@
     # If the first token is a string, then it's the module docstring.
     # Add this special case so that the test in the loop passes.
     prev_ttype = token.INDENT
-    f = open(filename)
+    f = open(filename, encoding=encoding)
     for ttype, tstr, start, end, line in tokenize.generate_tokens(f.readline):
         if ttype == token.STRING:
             if prev_ttype == token.INDENT:
@@ -417,13 +423,15 @@
 def find_executable_linenos(filename):
     """Return dict where keys are line numbers in the line number table."""
     try:
-        prog = open(filename, "rU").read()
+        with io.FileIO(filename, 'r') as file:
+            encoding, lines = tokenize.detect_encoding(file.readline)
+        prog = open(filename, "r", encoding=encoding).read()
     except IOError as err:
         print(("Not printing coverage data for %r: %s"
                               % (filename, err)), file=sys.stderr)
         return {}
     code = compile(prog, filename, "exec")
-    strs = find_strings(filename)
+    strs = find_strings(filename, encoding)
     return find_lines(code, strs)
 
 class Trace:
