diff --git a/Lib/doctest.py b/Lib/doctest.py
index aeeb15d..8134170 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -218,11 +218,18 @@
                 return file_contents.replace(os.linesep, '\n'), filename
     return open(filename).read(), filename
 
+# Use sys.stdout encoding for ouput.
+_encoding = getattr(sys.__stdout__, 'encoding', None) or 'utf-8'
+
 def _indent(s, indent=4):
     """
-    Add the given number of space characters to the beginning every
-    non-blank line in `s`, and return the result.
+    Add the given number of space characters to the beginning of
+    every non-blank line in `s`, and return the result.
+    If the string `s` is Unicode, it is encoded using the stdout
+    encoding and the `backslashreplace` error handler.
     """
+    if isinstance(s, unicode):
+        s = s.encode(_encoding, 'backslashreplace')
     # This regexp matches the start of non-blank lines:
     return re.sub('(?m)^(?!$)', indent*' ', s)
 
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index a812868..c332a40 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 """
 Test script for doctest.
 """
@@ -372,7 +373,7 @@
     >>> tests = finder.find(sample_func)
 
     >>> print tests  # doctest: +ELLIPSIS
-    [<DocTest sample_func from ...:16 (1 example)>]
+    [<DocTest sample_func from ...:17 (1 example)>]
 
 The exact name depends on how test_doctest was invoked, so allow for
 leading path components.
@@ -2143,6 +2144,13 @@
 called with the name of a file, which is taken to be relative to the
 calling module.  The return value is (#failures, #tests).
 
+We don't want `-v` in sys.argv for these tests.
+
+    >>> save_argv = sys.argv
+    >>> if '-v' in sys.argv:
+    ...     sys.argv = [arg for arg in save_argv if arg != '-v']
+
+
     >>> doctest.testfile('test_doctest.txt') # doctest: +ELLIPSIS
     **********************************************************************
     File "...", line 6, in test_doctest.txt
@@ -2282,6 +2290,41 @@
     >>> doctest.testfile('test_doctest4.txt', encoding='utf-8')
     TestResults(failed=0, attempted=4)
     >>> doctest.master = None  # Reset master.
+
+Switch the module encoding to 'utf-8' to test the verbose output without
+bothering with the current sys.stdout encoding.
+
+    >>> doctest._encoding, saved_encoding = 'utf-8', doctest._encoding
+    >>> doctest.testfile('test_doctest4.txt', encoding='utf-8', verbose=True)
+    Trying:
+        u'föö'
+    Expecting:
+        u'f\xf6\xf6'
+    ok
+    Trying:
+        u'bąr'
+    Expecting:
+        u'b\u0105r'
+    ok
+    Trying:
+        'föö'
+    Expecting:
+        'f\xc3\xb6\xc3\xb6'
+    ok
+    Trying:
+        'bąr'
+    Expecting:
+        'b\xc4\x85r'
+    ok
+    1 items passed all tests:
+       4 tests in test_doctest4.txt
+    4 tests in 1 items.
+    4 passed and 0 failed.
+    Test passed.
+    TestResults(failed=0, attempted=4)
+    >>> doctest._encoding = saved_encoding
+    >>> doctest.master = None  # Reset master.
+    >>> sys.argv = save_argv
 """
 
 # old_test1, ... used to live in doctest.py, but cluttered it.  Note
