diff -r 8b764c3521fa Lib/logging/__init__.py --- a/Lib/logging/__init__.py Tue May 07 11:14:27 2013 +0300 +++ b/Lib/logging/__init__.py Tue Oct 15 23:16:20 2013 +0200 @@ -857,7 +857,7 @@ class StreamHandler(Handler): try: if (isinstance(msg, unicode) and getattr(stream, 'encoding', None)): - ufs = fs.decode(stream.encoding) + ufs = u'%s\n' try: stream.write(ufs % msg) except UnicodeEncodeError: diff -r 8b764c3521fa Lib/test/test_logging.py --- a/Lib/test/test_logging.py Tue May 07 11:14:27 2013 +0300 +++ b/Lib/test/test_logging.py Tue Oct 15 23:16:20 2013 +0200 @@ -1060,6 +1060,24 @@ class EncodingTest(BaseTest): #Compare against what the data should be when encoded in CP-1251 self.assertEqual(s, '\xe4\xee \xf1\xe2\xe8\xe4\xe0\xed\xe8\xff\n') + def test_encoding_utf16_unicode(self): + # Issue #19267 + log = logging.getLogger("test") + message = u'b\u0142\u0105d' + writer_class = codecs.getwriter('utf-16-le') + writer_class.encoding = 'utf-16-le' + stream = cStringIO.StringIO() + writer = writer_class(stream, 'strict') + handler = logging.StreamHandler(writer) + log.addHandler(handler) + try: + log.warning(message) + finally: + log.removeHandler(handler) + handler.close() + s = stream.getvalue() + self.assertEqual(s, 'b\x00B\x01\x05\x01d\x00\n\x00') + class WarningsTest(BaseTest):