Commits

Georg Brandl committed df0fb1e

Fix two issues with non-ASCII characters being written to byte streams.

Comments (0)

Files changed (3)

 Release 0.5.1 (in development)
 ==============================
 
+* Don't crash on failing doctests with non-ASCII characters.
+
+* Don't crash on writing status messages and warnings containing
+  unencodable characters.
+
 * Warn if a doctest extension block doesn't contain any code.
 
 * Fix the handling of ``:param:`` and ``:type:`` doc fields when

sphinx/application.py

 
     def warn(self, message):
         self._warncount += 1
-        self._warning.write('WARNING: %s\n' % message)
+        try:
+            self._warning.write('WARNING: %s\n' % message)
+        except UnicodeEncodeError:
+            encoding = getattr(self._warning, 'encoding', 'ascii')
+            self._warning.write(('WARNING: %s\n' % message).encode(encoding, 'replace'))
 
     def info(self, message='', nonl=False):
-        if nonl:
+        try:
             self._status.write(message)
-        else:
-            self._status.write(message + '\n')
+        except UnicodeEncodeError:
+            encoding = getattr(self._status, 'encoding', 'ascii')
+            self._status.write(message.encode(encoding, 'replace'))
+        if not nonl:
+            self._status.write('\n')
         self._status.flush()
 
     # general extensibility interface

sphinx/ext/doctest.py

 import re
 import sys
 import time
+import codecs
 import StringIO
 from os import path
 # circumvent relative import
 
         date = time.strftime('%Y-%m-%d %H:%M:%S')
 
-        self.outfile = file(path.join(self.outdir, 'output.txt'), 'w')
+        self.outfile = codecs.open(path.join(self.outdir, 'output.txt'),
+                                   'w', encoding='utf-8')
         self.outfile.write('''\
 Results of doctest builder run on %s
 ==================================%s