Avoiding use of .encode() in rss2html
Work in Unicode and encode at the last moment:

def entry2html(**kwargs):
    """ Format feedparser entry """
    template = u"""
    &lt;h2 class='title'&gt;{title}&lt;/h2&gt;
    &lt;a class='link' href='{link}'&gt;{title}&lt;/a&gt;
    &lt;span class='description'&gt;{description}&lt;/span&gt;
    """
    return template.format(**kwargs)

def convert_feed(**kwargs):
    """ Main loop """
    out = u'\n'.join(entry2html(**entry) 
                    for entry in parsefeed(kwargs['url']).entries)
    return out.encode('utf-8')


You can pass entry directly as format does not mind extra keyword arguments. StringIO is not necessary for simple concatenation of strings.