Python,删除UTF8 MySQL DB无法处理的字符,例如表情符号

标签 python mysql regex utf-8 emoji

如何替换 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/

相关文章:

python - 根据字符串条件填充缺失值

python - 将字符串拆分为长度连续增加的子字符串 block

python - 将列表拆分为 pandas DataFrame 中的多列

mysql - 在 SQL 上删除触发器之前。

java - 从字符串中提取一些信息 - Java + 正则表达式

python - 在 Python 2.7.2 中使用 REGEX 检索字符串

python - docker python :3 with docker-compose 中缺少环境变量

php - 我这里的代码太多,想简短一点

MySQL 在 3 个服务器上表现不同,相同版本

mysql - 如何使用正则表达式更新mysql?