UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
Meld 3.16 fails when comparing files or folders with non-ascii names.
Dir comparison example:
$ set | grep '^LA'
LANG=de_DE.utf8
LANGUAGE=de:en_US
mkdir /tmp/left
mkdir /tmp/right_öäü
meld /tmp/left/ /tmp/right_öäü/
meld /tmp/left/ /tmp/right_öäü/
Usage:
meld Beim Start kein Fenster öffnen
meld <Datei|Ordner> Versionskontrollvergleich starten
meld <Datei> <Datei> [<Datei>] Im Zwei- oder Dreiwegevergleich starten
meld <Ordner> <Ordner> [<Ordner>] Einen Zwei- oder Dreiwegevergleich starten
Fehler: 'ascii' codec can't decode byte 0xc3 in position 21: ordinal not in range(128)
LANG=C LANGUAGE=C meld /tmp/left/ /tmp/right_öäü/
Usage:
meld Start with an empty window
meld <file|folder> Start a version control comparison
meld <file> <file> [<file>] Start a 2- or 3-way file comparison
meld <folder> <folder> [<folder>] Start a 2- or 3-way folder comparison
Error: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
When inserting a raise
after line 338 in meldapp.py it says:
LANG=C LANGUAGE=C meld /tmp/left/ /tmp/right_öäü/
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 78, in do_command_line
tab = self.parse_args(command_line)
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 336, in parse_args
focus=i == 0)
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 155, in open_files
return window.open_paths(paths, **kwargs)
File "/usr/lib/python2.7/dist-packages/meld/meldwindow.py", line 775, in open_paths
paths, auto_compare=auto_compare, auto_merge=auto_merge)
File "/usr/lib/python2.7/dist-packages/meld/meldwindow.py", line 719, in append_diff
return self.append_dirdiff(paths, auto_compare)
File "/usr/lib/python2.7/dist-packages/meld/meldwindow.py", line 683, in append_dirdiff
doc.set_locations(dirs)
File "/usr/lib/python2.7/dist-packages/meld/dirdiff.py", line 628, in set_locations
locations[i] = l.decode(sys.getfilesystemencoding())
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
File comparison example (with raise
added to line 338 in meldapp.py
):
touch /tmp/left.txt /tmp/right_öäü.txt
meld /tmp/left.txt /tmp/right_öäü.txt
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 78, in do_command_line
tab = self.parse_args(command_line)
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 336, in parse_args
focus=i == 0)
File "/usr/lib/python2.7/dist-packages/meld/meldapp.py", line 155, in open_files
return window.open_paths(paths, **kwargs)
File "/usr/lib/python2.7/dist-packages/meld/meldwindow.py", line 777, in open_paths
recent_comparisons.add(tab)
File "/usr/lib/python2.7/dist-packages/meld/recent.py", line 104, in add
recent_path = self._write_recent_file(comp_type, paths)
File "/usr/lib/python2.7/dist-packages/meld/recent.py", line 169, in _write_recent_file
config.write(f)
File "/usr/lib/python2.7/dist-packages/configparser.py", line 955, in write
self._sections[section].items(), d)
File "/usr/lib/python2.7/dist-packages/configparser.py", line 964, in _write_section
value = delimiter + unicode(value).replace(u'\n', u'\n\t')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 25: ordinal not in range(128)
Removing paths = [p.encode(sys.getfilesystemencoding()) for p in paths]
in line 158 of recent.py
or changing ";".join(paths)
to ";".join(paths).encode("utf-8")
in line 168 did not help. Do you have any ideas what to test else?