Er is een bug in python 2.x is dat alleen vast python 3.x. Deze bug zit zelfs in de iconv van OS X (maar niet in de glibc).
Dit is wat er gebeurt:
Python 2.x herkent UTF8-surrogaatparen [1] niet als ongeldig (wat uw tekenreeks is)
Dit moet wees alles wat nodig is:
foo.decode('utf8').encode('utf8')
Maar dankzij die bug die ze niet repareren, vangt het geen surrogaatparen.
Probeer dit in python 2.x en daarna in 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Het zal een fout (correct) in de laatste gooien. Ze repareren het ook niet in de 2.x-tak. Zie [2] en [3] voor meer info
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209