Es gibt einen Fehler in python 2.x ist das nur behoben python 3.x. Tatsächlich ist dieser Fehler sogar in OS Xs iconv (aber nicht in glibc).
Folgendes passiert:
Python 2.x erkennt UTF8-Ersatzpaare [1] nicht als ungültig (was Ihre Zeichenfolge ist)
Das sollte alles was benötigt wird:
foo.decode('utf8').encode('utf8')
Aber dank dieses Fehlers, den sie nicht beheben, werden keine Ersatzpaare erfasst.
Versuchen Sie dies in Python 2.x und dann in 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Letzteres wird (korrekt) einen Fehler auslösen. Sie beheben es auch nicht im 2.x-Zweig. Siehe [2] und [3] für weitere Informationen
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209