Der er en fejl i python 2.x, der kun er fast python 3.x. Faktisk er denne fejl endda i OS X's iconv (men ikke den glibc).
Her er, hvad der sker:
Python 2.x genkender ikke UTF8 surrogatpar [1] som værende ugyldige (hvilket er din karaktersekvens)
Dette skal være alt, hvad der er nødvendigt:
foo.decode('utf8').encode('utf8')
Men takket være den fejl, de ikke retter, fanger den ikke surrogatpar.
Prøv dette i python 2.x og derefter i 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Det vil kaste en fejl (korrekt) i sidstnævnte. De fikser det heller ikke i 2.x-grenen. Se [2] og [3] for mere information
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209