Index: trac/web/main.py
===================================================================
--- trac/web/main.py	(revision 6635)
+++ trac/web/main.py	(working copy)
@@ -464,7 +464,8 @@
                         lineno = tb.tb_lineno - 1
                         before, line, after = get_lines_from_file(filename,
                                                                   lineno, 5)
-                        frames += [{'traceback': tb, 'filename': filename,
+                        frames += [{'traceback': tb,
+                                    'filename': to_unicode(filename),
                                     'lineno': lineno, 'line': line,
                                     'lines_before': before, 'lines_after': after,
                                     'function': tb.tb_frame.f_code.co_name,
Index: trac/util/__init__.py
===================================================================
--- trac/util/__init__.py	(revision 6635)
+++ trac/util/__init__.py	(working copy)
@@ -141,6 +141,7 @@
     `lineno` from the file identified by `filename`.
     
     Returns a `(lines_before, line, lines_after)` tuple.
+    `lines_before`, `line` and `lines_after` are returned by using to_unicode()
     """
     if os.path.isfile(filename):
         fileobj = open(filename, 'U')
@@ -149,9 +150,10 @@
             lbound = max(0, lineno - context)
             ubound = lineno + 1 + context
 
-            before = [l.rstrip('\n') for l in lines[lbound:lineno]]
-            line = lines[lineno].rstrip('\n')
-            after = [l.rstrip('\n') for l in lines[lineno + 1:ubound]]
+            before = [to_unicode(l.rstrip('\n')) for l in lines[lbound:lineno]]
+            line = to_unicode(lines[lineno].rstrip('\n'))
+            after = [to_unicode(l.rstrip('\n')) \
+                        for l in lines[lineno + 1:ubound]]
 
             return before, line, after
         finally:

