Има бъговената в python 2.x това е само фиксирано python 3.x. Всъщност този бъг е дори в iconv на OS X (но не и в glibc).
Ето какво се случва:
Python 2.x не разпознава заместващи двойки UTF8 [1] като невалидни (каквато е вашата последователност от знаци)
Това трябва бъде всичко, което е необходимо:
foo.decode('utf8').encode('utf8')
Но благодарение на тази грешка, която не коригират, тя не улавя сурогатни двойки.
Опитайте това в python 2.x и след това в 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Той ще изведе грешка (правилно) в последния. Те също не го поправят в клона 2.x. Вижте [2] и [3] за повече информация
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209