The problem is that your terminal / shell (cmd, like you on Windows) cannot print every Unicode character.
You may str.encode encode your lines with the errors argument of the str.encode method. For example, can you replace unsupported characters ? by setting errors='replace' .
>>> s = u'\u2019' >>> print s Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\encodings\cp850.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can\'t encode character u'\u2019' in position 0: character maps to <undefined> >>> print s.encode('cp850', errors='replace') ?
See the documentation for other parameters.
Change If you want a generic logging solution, you can subclass StreamHandler :
class CustomStreamHandler(logging.StreamHandler): def emit(self, record): record = record.encode('cp850', errors='replace') logging.StreamHandler.emit(self, record)
source share