Add support for windows unicode console to prints()

This commit is contained in:
Kovid Goyal 2014-02-11 08:24:29 +05:30
parent 07802d913c
commit 31d4b7924a
2 changed files with 10 additions and 13 deletions

View File

@ -183,6 +183,14 @@ def prints(*args, **kwargs):
enc = 'utf-8'
for i, arg in enumerate(args):
if isinstance(arg, unicode):
if iswindows:
from calibre.utils.terminal import Detect
cs = Detect(file)
if cs.is_console:
cs.write_unicode_text(arg)
if i != len(args)-1:
file.write(bytes(sep))
continue
try:
arg = arg.encode(enc)
except UnicodeEncodeError:

View File

@ -41,19 +41,8 @@ class ANSIStream(Stream):
def prints(self, level, *args, **kwargs):
from calibre.utils.terminal import ColoredStream
with ColoredStream(self.stream, self.color[level]) as cs:
kwargs['file'] = self.stream
if cs.is_console:
for i, arg in enumerate(args):
if isinstance(arg, unicode):
cs.write_unicode_text(arg)
else:
self._prints(arg, end='', file=self.stream)
if i < len(args) - 1:
self._prints(kwargs.get('sep', ' '), end='', file=self.stream)
self._prints('', end=kwargs.get('end', '\n'), file=self.stream)
else:
self._prints(*args, **kwargs)
with ColoredStream(self.stream, self.color[level]):
self._prints(*args, **kwargs)
def flush(self):
self.stream.flush()