Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment filtrer (ou remplacer) les caractères unicode qui prendraient plus de 3 octets en UTF-8 ?

Les caractères Unicode dans les plages \u0000-\uD7FF et \uE000-\uFFFF auront des encodages de 3 octets (ou moins) en UTF8. La plage \uD800-\uDFFF est pour UTF16 multi-octets. Je ne connais pas Python, mais vous devriez pouvoir configurer une expression régulière pour correspondre en dehors de ces plages.

pattern = re.compile("[\uD800-\uDFFF].", re.UNICODE)
pattern = re.compile("[^\u0000-\uFFFF]", re.UNICODE)

Modifier en ajoutant Python du script de Denilson Sá dans le corps de la question :

re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
filtered_string = re_pattern.sub(u'\uFFFD', unicode_string)