diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py index 353462bb510..a3ccb86266f 100644 --- a/lib/galaxy/datatypes/sniff.py +++ b/lib/galaxy/datatypes/sniff.py @@ -64,15 +64,20 @@ def stream_to_open_named_file(stream, fd, filename, source_encoding=None, source codecs.lookup(target_encoding) except Exception: target_encoding = util.DEFAULT_ENCODING # utf-8 + use_source_encoding = source_encoding is not None while True: chunk = stream.read(CHUNK_SIZE) if not chunk: break - if source_encoding is not None: + if use_source_encoding: # If a source encoding is given we use it to convert to the target encoding - if not isinstance(chunk, text_type): - chunk = chunk.decode(source_encoding, source_error) - os.write(fd, chunk.encode(target_encoding, target_error)) + try: + if not isinstance(chunk, text_type): + chunk = chunk.decode(source_encoding, source_error) + os.write(fd, chunk.encode(target_encoding, target_error)) + except UnicodeDecodeError: + use_source_encoding = False + os.write(fd, chunk) else: # Compressed files must be encoded after they are uncompressed in the upload utility, # while binary files should not be encoded at all.