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

Wie kann man Unicode-Zeichen filtern (oder ersetzen), die in UTF-8 mehr als 3 Bytes benötigen würden?

Unicode-Zeichen in den Bereichen \u0000-\uD7FF und \uE000-\uFFFF haben 3 Byte (oder weniger) Kodierungen in UTF8. Der Bereich \uD800-\uDFFF ist für Multibyte UTF16. Ich kenne Python nicht, aber Sie sollten in der Lage sein, einen regulären Ausdruck einzurichten, der außerhalb dieser Bereiche passt.

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

Bearbeiten Sie das Hinzufügen von Python aus dem Skript von Denilson Sá im Fragetext:

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