美文网首页Android开发经验谈Android技术知识Android开发
ios - android - web emoji互通方案及实现

ios - android - web emoji互通方案及实现

作者: DaZenD | 来源:发表于2020-07-02 11:55 被阅读0次

    ios

    ios 表情较多,最新的还包含有肤色:

    所以:https://github.com/vbonluk/iOS_Emoji 单就ios内实现的话,这篇文章支持的表情更全一些

    但是,emoji跟多个平台互通:android,web,server保存。。所以,需要通过统一的手段实现。

    转 html

    https://www.jianshu.com/p/8436bdd30769

    大致分为4类表情

    单字节长的符号

    ヘ,ડ等。。

    这类表情出现在ios的表情”新鲜“一栏中,颜文字中这类的也较多。。这类里的表情是组合的,并且规则不统一,有些是单字节组合多字节,有些是多字节组合

    单字符长 & 字节len > 2


    ´´´´´´´´´´
    ••••••••••

    普通表情

    web,ios,android通用的表情,字符长 == 2;一般字节数 >= 4

    这类表情,Unicode码是单一的

    组合字符表情

    如:

    👩‍❤️‍💋‍👩 :U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469

    👯‍♀️:U+1F46F U+200D U+2640 U+FE0F

    Unicode码是组合字符,lenght > 2..字符长都是大于2的。

    表情过滤方案

    方案1:收集几个特殊字符,获取十六进制码,过滤掉
    处理:特殊字符Unicode需要自己收集,不合理,但是当成表情处理发送,android端可能没有,会显示为:񝶐

    可以妥协

    特殊字符:UniChar隐藏版iPhone特殊表情

    如果需要收集,这里特殊表情大全,需要ios13手机copy处来,用ios代码计算出来各个表情的Unicode码

    方案2:当成非表情发送。。。特殊的:作业接口不行
    处理:༄。这类符号,其实是单字节的表情,特殊匹配处理:

    1):获取表情Unicode码:格式为@"F04",非@"OxF04"
    2):转为html。形如:@"&#3844"..为了跟普通表情保持统一,需要在前面补0::形如:@”&#003844“
    3):格式化单字节表情hmtl码:补全长度为9.。

    android server 互通

    android 库:

    android emoji转html,有16进制的,如:⚾ 有是进制的,如:⚾

    所以:到ios端,需要特殊处理兼容一下。。。

    是否是十六进制,处理一下

    修饰符

    ️ 就是 ️

    在处理的时候,原html字符串的截取要考虑到这种修饰符。以为它:不占位置,但有长度

    Unicode码是:FE00 ~ FE0F

    这中符号,在正则匹配中,就不要匹配出来,空就空了。不要匹配出来转hmtl。正常。。

    建议先将emoji转html,再过滤

    __block NSString *result = text;
        NSString * regExpStr = @"[\\uFE00-\\uFE0F]";
        NSString * replacement = @"";
        NSRegularExpression *regExp = [[NSRegularExpression alloc] initWithPattern:regExpStr options:NSRegularExpressionCaseInsensitive error:nil];
        // 替换匹配的字符串为
        result = [regExp stringByReplacingMatchesInString:result
                                                  options:NSMatchingReportProgress
                                                    range:NSMakeRange(0, result.length)
                                             withTemplate:replacement];
    

    高半代理

    mac上查看Unicode字符表

    bianti.png

    肤色

    从Unicode字符表里能查到

    unitl

    回头补上我的链接

    参考文章

    方案偏

    Emoji 实战问题:iOS,Android,Server

    技术篇

    从Emoji的限制到Unicode编码

    由一个 emoji 引发的思考

    NSString 与 Unicode

    正则

    技巧篇

    计算字符字节长

    ios字符长补长
    ios数字字符长补长

    物料偏

    EMOJI CHEAT SHEET

    liuyuning/DumpEmoji

    full-emoji-list

    工具

    正则校验

    相关文章

      网友评论

        本文标题:ios - android - web emoji互通方案及实现

        本文链接:https://www.haomeiwen.com/subject/eawlqktx.html