sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo filtrar (o reemplazar) caracteres Unicode que tomarían más de 3 bytes en UTF-8?

Los caracteres Unicode en los rangos \u0000-\uD7FF y \uE000-\uFFFF tendrán codificaciones de 3 bytes (o menos) en UTF8. El rango \uD800-\uDFFF es para UTF16 multibyte. No sé Python, pero debería poder configurar una expresión regular para que coincida fuera de esos rangos.

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

Edite agregando Python del script de Denilson Sá en el cuerpo de la pregunta:

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