• 存储一个emoji表情,为什么有时候占用两个字符?


    前言

    这个问题来自开发一个系统测试提出的bug,某个字段限制只能传输50个字符,测试输入emoji表情,只输入了26个时保存就会报超长。

    分析

    Spring开发的程序,用@Length做的限制,总不会是框架的bug?
    于是调试测试了一下,只传一个表情字符进来,代码接收到的字符串长度,竟然是2.

    调试用的是飞机的表情字符✈️,后端在ide里调试时,现实的两个字符,第一个时飞机没错,第二个是一个不能显示的字符,十六进制'FE0F',这是什么?

    Variation Selector-16

    搜索了一下,发现emoji除了定义了表情字符,还定义了一个控制前一个表情字符如何展示的特殊字符叫'Variation Selector-16',具体介绍链接在这里

    简单来说,emoji字符串的展示方式,有字符方式和emoji方式两种,我的理解是emoji展示的效果更好。而有的字符,在emoji定义中,默认是用字符方式展示。

    比如上面的飞机字符,unicode编码'U+2708',默认是'✈',而如果在这个字符后面紧跟着'U+FE0F'这个控制字符,则展示效果会变成✈️(具体展示效果取决于不同的浏览器)。

    结论

    部分emoji字符,通过输入法打出来的虽然是一个表情符号,但是由于后面跟了'Variation Selector-16',会占用两个字符。

  • 相关阅读:
    kibana x-pack 更新license
    elastic search集群请求超时
    angular4 angular/cli 版本升级
    windows 编写shell 脚本转化成unix
    spring boot 自定义HandlerMethodArgumentResolver做参数校验
    Fiddler 重定向BUG
    scoop
    acm每日刷题记录
    ccpc 2016 changchun 长春(4.12训练)
    cf 338E
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/16252038.html
Copyright © 2020-2023  润新知