# -*- coding: UTF-8 -*- from unicodedata import normalize def any2ascii(value): if isinstance(value, (int, long)): return str(abs(value)) if isinstance(value, str): try: return unicode(value, "ascii") except UnicodeDecodeError: pass for charset in ("utf-8", "latin-1"): try: value = unicode(value, charset) break except UnicodeDecodeError: continue elif not isinstance(value, unicode): raise ValueError("Unable to transform type %s" % value.__class__.__name__) value = normalize("NFKD", value) return value.encode('ascii','ignore') print any2ascii( (u"Été").encode("UTF-8") ) print any2ascii( (u"Été").encode("latin-1") ) print any2ascii( "ete" ) print any2ascii(u"Été")