PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso controllare una stringa Unicode Python per vedere che *in realtà* è Unicode corretto?

C'è un bug in python 2.x è stato risolto solo python 3.x. In effetti, questo bug è presente anche nell'iconv di OS X (ma non in quello glibc).

Ecco cosa sta succedendo:

Python 2.x non riconosce le coppie di surrogati UTF8 [1] come non valide (che è la sequenza di caratteri)

Questo dovrebbe essere tutto ciò che serve:

foo.decode('utf8').encode('utf8')

Ma grazie a quel bug che non stanno risolvendo, non cattura le coppie surrogate.

Prova questo in Python 2.x e poi in 3.x:

b'\xed\xbd\xbf'.decode('utf8')

Genererà un errore (correttamente) in quest'ultimo. Non lo stanno risolvendo nemmeno nel ramo 2.x. Vedi [2] e [3] per maggiori informazioni

[1] https://www.rfc-editor.org/rfc/ rfc3629#sezione-4

[2] http://bugs.python.org/issue9133

[3] http://bugs.python.org/issue8271#msg102209