diff --git a/src/calibre/db/tables.py b/src/calibre/db/tables.py index c8d974fcf7..6d578e788c 100644 --- a/src/calibre/db/tables.py +++ b/src/calibre/db/tables.py @@ -92,7 +92,14 @@ class OneToOneTable(Table): query = db.conn.execute('SELECT {0}, {1} FROM {2}'.format(idcol, self.metadata['column'], self.metadata['table'])) if self.unserialize is None: - self.book_col_map = dict(query) + try: + self.book_col_map = dict(query) + except UnicodeDecodeError: + # The db is damaged, try to work around it by ignoring + # failures to decode utf-8 + query = db.conn.execute('SELECT {0}, cast({1} as blob) FROM {2}'.format(idcol, + self.metadata['column'], self.metadata['table'])) + self.book_col_map = {k:bytes(val).decode('utf-8', 'ignore') for k, val in query} else: us = self.unserialize self.book_col_map = {book_id:us(val) for book_id, val in query}