Ada bug di python 2.x itu hanya memperbaiki python 3.x. Faktanya, bug ini bahkan ada di iconv OS X (tetapi bukan yang glibc).
Inilah yang terjadi:
Python 2.x tidak mengenali pasangan pengganti UTF8 [1] sebagai tidak valid (yang merupakan urutan karakter Anda)
Ini harus menjadi semua yang dibutuhkan:
foo.decode('utf8').encode('utf8')
Namun berkat bug yang tidak mereka perbaiki, itu tidak menangkap pasangan pengganti.
Coba ini di python 2.x dan kemudian di 3.x:
b'\xed\xbd\xbf'.decode('utf8')
Ini akan menimbulkan kesalahan (dengan benar) di yang terakhir. Mereka juga tidak memperbaikinya di cabang 2.x. Lihat [2] dan [3] untuk info lebih lanjut
[1] https://www.rfc-editor.org/rfc/ rfc3629#section-4
[2] http://bugs.python.org/issue9133
[3] http://bugs.python.org/issue8271#msg102209