diff --git a/src/calibre/ebooks/fb2/output.py b/src/calibre/ebooks/fb2/output.py index 6eaef6ad19..af04179e9a 100644 --- a/src/calibre/ebooks/fb2/output.py +++ b/src/calibre/ebooks/fb2/output.py @@ -30,7 +30,7 @@ class FB2Output(OutputFormatPlugin): out_stream.seek(0) out_stream.truncate() - out_stream.write(fb2_content.encode('utf-8')) + out_stream.write(fb2_content.encode('utf-8', 'replace')) if close: out_stream.close() diff --git a/src/calibre/ebooks/pdb/ereader/output.py b/src/calibre/ebooks/pdb/ereader/output.py index f217c04415..7d3a75eeee 100644 --- a/src/calibre/ebooks/pdb/ereader/output.py +++ b/src/calibre/ebooks/pdb/ereader/output.py @@ -8,7 +8,6 @@ import os from calibre.customize.conversion import OutputFormatPlugin from calibre.ebooks.pdb.ereader.writer import Writer -from calibre.ebooks.metadata import authors_to_string class EREADEROutput(OutputFormatPlugin): diff --git a/src/calibre/ebooks/pdb/ereader/reader132.py b/src/calibre/ebooks/pdb/ereader/reader132.py index 91edfaf48b..7821a9e509 100644 --- a/src/calibre/ebooks/pdb/ereader/reader132.py +++ b/src/calibre/ebooks/pdb/ereader/reader132.py @@ -73,9 +73,9 @@ class Reader132(FormatReader): def decompress_text(self, number): if self.header_record.version == 2: - return decompress_doc(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding) + return decompress_doc(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding, 'replace') if self.header_record.version == 10: - return zlib.decompress(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding) + return zlib.decompress(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding, 'replace') def get_image(self, number): if number < self.header_record.image_data_offset or number > self.header_record.image_data_offset + self.header_record.num_image_pages - 1: diff --git a/src/calibre/ebooks/pdb/ereader/reader202.py b/src/calibre/ebooks/pdb/ereader/reader202.py index 3ef409c9ce..ec8380dfe5 100644 --- a/src/calibre/ebooks/pdb/ereader/reader202.py +++ b/src/calibre/ebooks/pdb/ereader/reader202.py @@ -54,7 +54,7 @@ class Reader202(FormatReader): return self.sections[number] def decompress_text(self, number): - return decompress_doc(''.join([chr(ord(x) ^ 0xA5) for x in self.section_data(number)])).decode('cp1252' if self.encoding is None else self.encoding) + return decompress_doc(''.join([chr(ord(x) ^ 0xA5) for x in self.section_data(number)])).decode('cp1252' if self.encoding is None else self.encoding, 'replace') def get_image(self, number): name = None diff --git a/src/calibre/ebooks/pdb/palmdoc/reader.py b/src/calibre/ebooks/pdb/palmdoc/reader.py index 915ed7d739..7e8f3b241c 100644 --- a/src/calibre/ebooks/pdb/palmdoc/reader.py +++ b/src/calibre/ebooks/pdb/palmdoc/reader.py @@ -49,7 +49,7 @@ class Reader(FormatReader): if self.header_record.compression == 1: return self.section_data(number).decode('cp1252' if self.encoding is None else self.encoding) if self.header_record.compression == 2: - return decompress_doc(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding) + return decompress_doc(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding, 'replace') return '' def extract_content(self, output_dir): diff --git a/src/calibre/ebooks/pdb/ztxt/reader.py b/src/calibre/ebooks/pdb/ztxt/reader.py index ccc26a3fdc..0c334556e8 100644 --- a/src/calibre/ebooks/pdb/ztxt/reader.py +++ b/src/calibre/ebooks/pdb/ztxt/reader.py @@ -65,7 +65,7 @@ class Reader(FormatReader): def decompress_text(self, number): if number == 1: self.uncompressor = zlib.decompressobj() - return self.uncompressor.decompress(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding) + return self.uncompressor.decompress(self.section_data(number)).decode('cp1252' if self.encoding is None else self.encoding, 'replace') def extract_content(self, output_dir): txt = '' diff --git a/src/calibre/ebooks/pml/input.py b/src/calibre/ebooks/pml/input.py index be9876dc1f..270c8a7b0f 100644 --- a/src/calibre/ebooks/pml/input.py +++ b/src/calibre/ebooks/pml/input.py @@ -44,7 +44,7 @@ class PMLInput(InputFormatPlugin): self.log.debug('Converting PML to HTML...') html = pml_to_html(pml_stream.read().decode(ienc)) - html_stream.write('</head><body>' + html.encode('utf-8') + '</body></html>') + html_stream.write('<html><head><title /></head><body>' + html.encode('utf-8', 'replace') + '</body></html>') if pclose: pml_stream.close() diff --git a/src/calibre/ebooks/rb/reader.py b/src/calibre/ebooks/rb/reader.py index c4668b94bf..f97c3d78c5 100644 --- a/src/calibre/ebooks/rb/reader.py +++ b/src/calibre/ebooks/rb/reader.py @@ -84,9 +84,9 @@ class Reader(object): for size in chunck_sizes: cm_chunck = self.stream.read(size) - output += zlib.decompress(cm_chunck).decode('cp1252' if self.encoding is None else self.encoding) + output += zlib.decompress(cm_chunck).decode('cp1252' if self.encoding is None else self.encoding, 'replace') else: - output += self.stream.read(toc_item.size).decode('cp1252' if self.encoding is None else self.encoding) + output += self.stream.read(toc_item.size).decode('cp1252' if self.encoding is None else self.encoding, 'replace') with open(os.path.join(output_dir, toc_item.name), 'wb') as html: html.write(output.encode('utf-8')) diff --git a/src/calibre/ebooks/txt/input.py b/src/calibre/ebooks/txt/input.py index 76574c3e35..56a2dadd5c 100644 --- a/src/calibre/ebooks/txt/input.py +++ b/src/calibre/ebooks/txt/input.py @@ -22,7 +22,7 @@ class TXTInput(InputFormatPlugin): if options.input_encoding: ienc = options.input_encoding log.debug('Reading text from file...') - txt = stream.read().decode(ienc) + txt = stream.read().decode(ienc, 'replace') log.debug('Running text though markdown conversion...') try: