Python中MySQL数据库改为utf8mb4后,手机emoji表情在PC端显示异常怎么办?

刚给 mysql 数据库改成了 utf8mb4,手机发的 emoji 表情图。在手机上显示正常,在 pc 端就成了😪🤕🤒💩💤👿😪
这是怎么回事?
Python中MySQL数据库改为utf8mb4后,手机emoji表情在PC端显示异常怎么办?

22 回复

好像 Win10 以下版本不支持显示 emoji
macOS 表示显示没问题

https://i.loli.net/2017/09/04/59ad6aab6ab6d.png


这个问题是因为PC端数据库客户端或应用本身的字符集设置没跟上。

核心就两步:

  1. 确保连接层用utf8mb4
    在Python里,连接MySQL时必须显式指定字符集:

    import pymysql
    conn = pymysql.connect(
        host='localhost',
        user='user',
        password='pass',
        database='db',
        charset='utf8mb4',  # 关键在这里
        cursorclass=pymysql.cursors.DictCursor
    )
    

    如果用了SQLAlchemy,连接字符串加 ?charset=utf8mb4

  2. 检查终端/IDE的显示支持
    如果数据在数据库里正确(用 HEX() 查emoji的存储是 F0 9F 98 80 这类4字节就对了),但PC程序显示为乱码,那很可能是PC端的显示环境不支持渲染emoji字体。
    比如Windows终端旧版本、某些IDE的默认字体,需要换用支持emoji的字体(如Segoe UI Emoji、Noto Color Emoji)。

总结:连数据库时charset设对,PC端换能显示emoji的字体。

Win10 表示也没问题…

原来是这样。谢谢了。。。

我还是 xp…

兼容 PC 的话,应该把编码替换成 img 吧

附:
http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html

不兼容


就是目前 xp 上就是无法显示暂时的?

怎么换?自已写代码转还是有什么别的方法

看客户端操作系统支持。

#10 win10 自带

这个数据库无关,和编码也没什么关系。既然手机上已经显示出来,说明是你没有 emoji 字体,或是浏览器没有回降到 emoji 字体。
PS: Firefox 仅支持 SVG in Opentype 类型 emoji,移动平台常见 png 彩色 emoji 不适用。

这是字体问题吧。

Mac 下显示没什么问题。
困,绷带,体温计,粑粑,困,恶魔,困

linux 表示 表情 方框*5 表情

emoji 转成 png 就能兼容了

这个怎么转?

别误导,原生 emoji 需要使用 utf8mb4 编码才能存储,服务端连接数据库的默认编码也需要使用 utf8mb4 编码。

mac 上显示正常

你这么一说好像的确有点。我是想强调现在问题不在编码了。就是个字体没有匹配的问题。

回到顶部