Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python, konvertieren Sie 4-Byte-Zeichen, um MySQL-Fehler zu vermeiden. Falscher Zeichenfolgenwert:

In einem UCS-2-Build verwendet Python intern 2 Codeeinheiten für jedes Unicode-Zeichen über dem \U0000ffff Codepunkt. Reguläre Ausdrücke müssen mit diesen funktionieren, also müssten Sie den folgenden regulären Ausdruck verwenden, um diese abzugleichen:

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

Dieser reguläre Ausdruck stimmt mit jedem Codepunkt überein, der mit einem UTF-16-Ersatzpaar codiert ist (siehe UTF-16-Code zeigt U+10000 bis U+10FFFF .

Um dies mit den Python UCS-2- und UCS-4-Versionen kompatibel zu machen, könnten Sie einen try: verwenden /except um das eine oder andere zu verwenden:

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

Demonstration auf einem UCS-2-Python-Build:

>>> 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: '