Index: django/newforms/util.py
===================================================================
--- django/newforms/util.py	(revision 4505)
+++ django/newforms/util.py	(working copy)
@@ -12,6 +12,10 @@
         s = unicode(s, settings.DEFAULT_CHARSET)
     return s
 
+def charrefs(s):
+    s = s.decode('utf-8').encode('ascii', 'xmlcharrefreplace')
+    return s
+
 class StrAndUnicode(object):
     """
     A class whose __str__ returns its __unicode__ as a bytestring
@@ -57,10 +61,10 @@
     def __init__(self, message):
         "ValidationError can be passed a string or a list."
         if isinstance(message, list):
-            self.messages = ErrorList([smart_unicode(msg) for msg in message])
+            self.messages = ErrorList([smart_unicode(charrefs(msg)) for msg in message])
         else:
             assert isinstance(message, basestring), ("%s should be a basestring" % repr(message))
-            message = smart_unicode(message)
+            message = smart_unicode(charrefs(message))
             self.messages = ErrorList([message])
 
     def __str__(self):
