Index: django/utils/feedgenerator.py
===================================================================
--- django/utils/feedgenerator.py	(revision 5383)
+++ django/utils/feedgenerator.py	(working copy)
@@ -19,6 +19,7 @@
 """
 
 from django.utils.xmlutils import SimplerXMLGenerator
+from django.utils.encoding import smart_unicode
 import datetime, re, time
 import email.Utils
 
@@ -157,36 +158,36 @@
     def write_items(self, handler):
         for item in self.items:
             handler.startElement(u"item", {})
-            handler.addQuickElement(u"title", item['title'])
-            handler.addQuickElement(u"link", item['link'])
+            handler.addQuickElement(u"title", smart_unicode(item['title']))
+            handler.addQuickElement(u"link", smart_unicode(item['link']))
             if item['description'] is not None:
-                handler.addQuickElement(u"description", item['description'])
-
+                handler.addQuickElement(u"description", smart_unicode(item['description']))
+            
             # Author information.
             if item["author_name"] and item["author_email"]:
-                handler.addQuickElement(u"author", "%s (%s)" % \
-                    (item['author_email'], item['author_name']))
+                handler.addQuickElement(u"author", u"%s (%s)" % \
+                    (smart_unicode(item['author_email']), smart_unicode(item['author_name'])))
             elif item["author_email"]:
-                handler.addQuickElement(u"author", item["author_email"])
+                handler.addQuickElement(u"author", smart_unicode(item["author_email"]))
             elif item["author_name"]:
-                handler.addQuickElement(u"dc:creator", item["author_name"], {"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
-
+                handler.addQuickElement(u"dc:creator", smart_unicode(item["author_name"]), {"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
+            
             if item['pubdate'] is not None:
                 handler.addQuickElement(u"pubDate", rfc2822_date(item['pubdate']).decode('ascii'))
             if item['comments'] is not None:
-                handler.addQuickElement(u"comments", item['comments'])
+                handler.addQuickElement(u"comments", smart_unicode(item['comments']))
             if item['unique_id'] is not None:
-                handler.addQuickElement(u"guid", item['unique_id'])
-
+                handler.addQuickElement(u"guid", smart_unicode(item['unique_id']))
+            
             # Enclosure.
             if item['enclosure'] is not None:
                 handler.addQuickElement(u"enclosure", '',
                     {u"url": item['enclosure'].url, u"length": item['enclosure'].length,
                         u"type": item['enclosure'].mime_type})
-
+            
             # Categories.
             for cat in item['categories']:
-                handler.addQuickElement(u"category", cat)
+                handler.addQuickElement(u"category", smart_unicode(cat))
 
             handler.endElement(u"item")
 
@@ -227,47 +228,47 @@
     def write_items(self, handler):
         for item in self.items:
             handler.startElement(u"entry", {})
-            handler.addQuickElement(u"title", item['title'])
-            handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"alternate"})
+            handler.addQuickElement(u"title", smart_unicode(item['title']))
+            handler.addQuickElement(u"link", u"", {u"href": smart_unicode(item['link']), u"rel": u"alternate"})
             if item['pubdate'] is not None:
                 handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('ascii'))
 
             # Author information.
             if item['author_name'] is not None:
                 handler.startElement(u"author", {})
-                handler.addQuickElement(u"name", item['author_name'])
+                handler.addQuickElement(u"name", smart_unicode(item['author_name']))
                 if item['author_email'] is not None:
-                    handler.addQuickElement(u"email", item['author_email'])
+                    handler.addQuickElement(u"email", smart_unicode(item['author_email']))
                 if item['author_link'] is not None:
-                    handler.addQuickElement(u"uri", item['author_link'])
+                    handler.addQuickElement(u"uri", smart_unicode(item['author_link']))
                 handler.endElement(u"author")
 
             # Unique ID.
             if item['unique_id'] is not None:
                 unique_id = item['unique_id']
             else:
-                unique_id = get_tag_uri(item['link'], item['pubdate'])
+                unique_id = get_tag_uri(smart_unicode(item['link']), smart_unicode(item['pubdate']))
             handler.addQuickElement(u"id", unique_id)
 
             # Summary.
             if item['description'] is not None:
-                handler.addQuickElement(u"summary", item['description'], {u"type": u"html"})
+                handler.addQuickElement(u"summary", smart_unicode(item['description']), {u"type": u"html"})
 
             # Enclosure.
             if item['enclosure'] is not None:
                 handler.addQuickElement(u"link", '',
                     {u"rel": u"enclosure",
-                     u"href": item['enclosure'].url,
+                     u"href": smart_unicode(item['enclosure'].url),
                      u"length": item['enclosure'].length,
                      u"type": item['enclosure'].mime_type})
 
             # Categories.
             for cat in item['categories']:
-                handler.addQuickElement(u"category", u"", {u"term": cat})
+                handler.addQuickElement(u"category", u"", {u"term": smart_unicode(cat)})
 
             # Rights.
             if item['item_copyright'] is not None:
-                handler.addQuickElement(u"rights", item['item_copyright'])
+                handler.addQuickElement(u"rights", smart_unicode(item['item_copyright']))
 
             handler.endElement(u"entry")
 
