如何替换 UTF8 MySQL 数据库无法处理的字符,例如 emojis 😀?
关键是只删除那些无法处理的字符。我从这个答案 removing emojis from a string in Python 得到了这段代码, 但它删除了太多。 (编辑:这是我从 remove unicode emoji using re in python 获得以下代码的页面)
myre = re.compile(u'('
u'\ud83c[\udf00-\udfff]|'
u'\ud83d[\udc00-\ude4f\ude80-\udeff]|'
u'[\u2600-\u26FF\u2700-\u27BF])+',
re.UNICODE)
my_text= myre.sub(r'EMOJI', my_text)
例如,这个心形符号♥可以保存到数据库中,但会被上面的正则表达式捕获。
最佳答案
MySQL 的 utf8
精确编码基本多语言平面 (BMP)。您需要从补充平面中排除所有代码点,而不是特定的表情符号,因为在 MySQL 中这些需要 utf8mb4
。
由于您似乎是在匹配 16 位而不是 32 位宽的字符串,因此 BMP 之外的代码点被编码为 0xD800..0xDBFF
范围内的所谓“高代理项” ,后跟 0xDC00..0xDFFF
范围内的“低代理项”。因此,相应的正则表达式是:
u'[\ud800-\udbff][\udc00-\udfff]'
。
♥ 不会匹配它,因为它是 u'\u2665'
。我认为严格来说,如果后跟变体选择器 U+FE0F
,它只是一个表情符号,但无论哪种方式,它都安全地位于 BMP 中。
关于Python,删除UTF8 MySQL DB无法处理的字符,例如表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668642/