Mysql
 sql >> Database >  >> RDS >> Mysql

Come filtrare (o sostituire) caratteri Unicode che richiederebbero più di 3 byte in UTF-8?

I caratteri Unicode negli intervalli \u0000-\uD7FF e \uE000-\uFFFF avranno codifiche di 3 byte (o meno) in UTF8. L'intervallo \uD800-\uDFFF è per UTF16 multibyte. Non conosco Python, ma dovresti essere in grado di impostare un'espressione regolare che corrisponda al di fuori di questi intervalli.

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

Modifica aggiungendo Python dallo script di Denilson Sá nel corpo della domanda:

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