Fix unicode filename issues using fsencode

* Same problem we've had before - linux filenames can have non-unicode chars
in them
* We need to write the filename as raw bytes to the log
* os.fsencode lets us convert a utf-8 encoded string to bytes and ignore those
that can't be printed as unicode
* Still not clear if the log generated this way will be human-readable
pull/14/head
Dan Puttick 2017-04-10 13:39:28 +02:00
parent 053f30db93
commit 45d71cb362
1 changed files with 2 additions and 2 deletions

View File

@ -576,12 +576,12 @@ class GroomerLogger(object):
return path_depth return path_depth
def _write_line_to_log(self, line, indentation_depth): def _write_line_to_log(self, line, indentation_depth):
# TODO: should we use fsencode and fsdecode here instead of just bytestrings?
padding = b' ' padding = b' '
padding += b'| ' * indentation_depth padding += b'| ' * indentation_depth
line_bytes = os.fsencode(line)
with open(self.log_path, mode='ab') as lf: with open(self.log_path, mode='ab') as lf:
lf.write(padding) lf.write(padding)
lf.write(bytes(line, encoding='utf-8')) lf.write(line_bytes)
lf.write(b'\n') lf.write(b'\n')