summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-10-15 21:36:56 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2013-10-15 21:36:56 (GMT)
commita5cd255a7cb15c7920171f0796cf163a00a5ecaf (patch)
tree829e414c09d9b59647517e63339bd17ac572d967 /Lib
parent8ad0eac7ff030940949e26688311ec857999735d (diff)
downloadcpython-a5cd255a7cb15c7920171f0796cf163a00a5ecaf.zip
cpython-a5cd255a7cb15c7920171f0796cf163a00a5ecaf.tar.gz
cpython-a5cd255a7cb15c7920171f0796cf163a00a5ecaf.tar.bz2
Close #19267: Fix support of multibyte encoding (ex: UTF-16) in the logging
module.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/logging/__init__.py2
-rw-r--r--Lib/test/test_logging.py18
2 files changed, 19 insertions, 1 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 0e8e3dd..cda781a 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -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 --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 31bc48e..0c10580 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -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):