如何检查Python unicode字符串以确定它**实际上是*正确的Unicode?

Sta*_*kis 7 python postgresql unicode

所以我有这个页面:

http://hub.iis.sinica.edu.tw/cytoHubba/

显然它是各种各样的搞砸了,因为它被正确解码但是当我尝试将它保存在postgres中时,我得到:

DatabaseError: invalid byte sequence for encoding "UTF8": 0xedbdbf
Run Code Online (Sandbox Code Playgroud)

数据库在此之后吵了起来并拒绝做任何事情而没有回滚,这将有点难以发布(长篇故事).有没有办法让我检查一下它是否会在它到达数据库之前发生?source.encode("utf-8")顺利运行,所以我不确定发生了什么......

mik*_*pie 9

python 2.x中有一个错误,它只是固定的python 3.x. 事实上,这个错误甚至在OS X的iconv中(但不是glibc).

这是发生了什么:

Python 2.x无法识别UTF8代理对[1]无效(这是你的字符序列)

应该是所需要的:

foo.decode('utf8').encode('utf8')
Run Code Online (Sandbox Code Playgroud)

但是由于这个bug他们没有修复,它没有捕获代理对.

在python 2.x然后在3.x中尝试:

b'\xed\xbd\xbf'.decode('utf8')
Run Code Online (Sandbox Code Playgroud)

它会在后者中引发错误(正确).他们也没有在2.x分支中修复它.有关详细信息,请参阅[2]和[3]

[1] http://tools.ietf.org/html/rfc3629#section-4

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

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