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

Python, convertissez un caractère de 4 octets pour éviter l'erreur MySQL Valeur de chaîne incorrecte :

Dans une version UCS-2, python utilise 2 unités de code en interne pour chaque caractère unicode sur le \U0000ffff point de code. Les expressions régulières doivent fonctionner avec celles-ci, vous devez donc utiliser l'expression régulière suivante pour les faire correspondre :

highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')

Cette expression régulière correspond à n'importe quel point de code encodé avec une paire de substitution UTF-16 (voir Points de code UTF-16 U+10000 à U+10FFFF .

Pour rendre cela compatible avec les versions Python UCS-2 et UCS-4, vous pouvez utiliser un try: /except pour utiliser l'un ou l'autre :

try:
    highpoints = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
    # UCS-2 build
    highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')

Démonstration sur une version python UCS-2 :

>>> import re
>>> highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '