sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag kontrollera en Python unicode-sträng för att se att den *faktiskt* är korrekt Unicode?

Det finns en bugg i python 2.x är det bara fast python 3.x. Faktum är att denna bugg även finns i OS X:s iconv (men inte den glibc).

Det här är vad som händer:

Python 2.x känner inte igen UTF8 surrogatpar [1] som ogiltiga (vilket är vad din teckensekvens är)

Detta bör vara allt som behövs:

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

Men tack vare den buggen som de inte fixar, den fångar inte surrogatpar.

Prova detta i python 2.x och sedan i 3.x:

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

Det kommer att ge ett fel (korrekt) i det senare. De fixar det inte heller i 2.x-grenen. Se [2] och [3] för mer information

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

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

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



  1. beräkna total inloggning-utloggningstid för en viss användare i mysql

  2. Flytta MySql från Windows-server till linux

  3. Vilken tidszonsinformation lagrar PostgreSQL?

  4. Kan jag ångra ALTER-tabellen i - MySQL?