Det finns en bugg i python 2.x är det bara fast python 3.x. Faktum är att denna bugg även finns i OS X:s iconv (men inte den glibc).
Det här är vad som händer:
Python 2.x känner inte igen UTF8 surrogatpar [1] som ogiltiga (vilket är vad din teckensekvens är)
Detta bör vara allt som behövs:
foo.decode('utf8').encode('utf8')
Men tack vare den buggen som de inte fixar, den fångar inte surrogatpar.
Prova detta i python 2.x och sedan i 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Det kommer att ge ett fel (korrekt) i det senare. De fixar det inte heller i 2.x-grenen. Se [2] och [3] för mer information
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209