diff --git a/src/calibre/utils/genshi/core.py b/src/calibre/utils/genshi/core.py index aaa10edc82..d64860f086 100644 --- a/src/calibre/utils/genshi/core.py +++ b/src/calibre/utils/genshi/core.py @@ -491,7 +491,9 @@ class Markup(unicode): if hasattr(text, '__html__'): return Markup(text.__html__()) - text = unicode(text).replace('&', '&') \ + if isinstance(text, str): + text = text.decode('utf-8', 'replace') + text = text.replace('&', '&') \ .replace('<', '<') \ .replace('>', '>') if quotes: diff --git a/src/calibre/web/feeds/news.py b/src/calibre/web/feeds/news.py index 9cc7139b28..33f24b5a05 100644 --- a/src/calibre/web/feeds/news.py +++ b/src/calibre/web/feeds/news.py @@ -7,7 +7,7 @@ Defines various abstract base classes that can be subclassed to create powerful __docformat__ = "restructuredtext en" -import logging, os, cStringIO, time, traceback, re, urlparse +import logging, os, cStringIO, time, traceback, re, urlparse, sys from collections import defaultdict from functools import partial @@ -533,6 +533,9 @@ class BasicNewsRecipe(object, LoggingInterface): self.image_map[feed.image_url] = img except: pass + if isinstance(feed.image_url, str): + feed.image_url = feed.image_url.decode(sys.getfilesystemencoding(), 'strict') + templ = templates.FeedTemplate() return templ.generate(feed, self.description_limiter).render(doctype='xhtml')