diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 25d4855980..6ae40d157d 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -554,6 +554,8 @@ class OPF(object): # {{{ resolve_entities=True, assume_utf8=True) raw = raw[raw.find('<'):] self.root = etree.fromstring(raw, self.PARSER) + if self.root is None: + raise ValueError('Not an OPF file') try: self.package_version = float(self.root.get('version', None)) except (AttributeError, TypeError, ValueError): diff --git a/src/calibre/ebooks/oeb/reader.py b/src/calibre/ebooks/oeb/reader.py index cb10b4ccce..b99f5d1087 100644 --- a/src/calibre/ebooks/oeb/reader.py +++ b/src/calibre/ebooks/oeb/reader.py @@ -127,7 +127,7 @@ class OEBReader(object): def _metadata_from_opf(self, opf): from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.oeb.transforms.metadata import meta_info_to_oeb_metadata - stream = cStringIO.StringIO(etree.tostring(opf)) + stream = cStringIO.StringIO(etree.tostring(opf, xml_declaration=True, encoding='utf-8')) mi = OPF(stream).to_book_metadata() if not mi.language: mi.language = get_lang().replace('_', '-')