emoji无法显示_微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!...

最近做的项目,上线后一切正常,过段时间管理员反馈用户导出EXCEL报错,前台获取用户列表不显示,查找问题找到是微信昵称、emoji表情导致报错,

emoji表情介绍

由于微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没有解码,表现就是当收到微信端用户发来的emoji表情时,显示为一个方块型「」或是无法显示的字符,这时就需要对其进行转码。

每个emoji表情其实都有相应的unicode编码,在解析用户向公众号发送的文字中的emoji表情字符时,我们可以根据unicode码来匹配或存储信息中的emoji表情;同理在向用户发送包含emoji表情的文字消息时,则将表情字符根据unicode编码进行二进制转码后再发送。

找网上各种,全是PHP和JAVA拿来试验一下,没解决问题,坑~~~,继续寻找,然后改造和请教群友,解决此问题

我使用的简单粗暴的方法,直接过滤到了emoji编码,暂时没有发现误伤:

1 #region 去掉表情符号

2 ///

3 ///去掉表情符号4 ///

5 ///

6 ///

7 public static bool isEmojiCharacter(charcodePoint)8 {9 return (codePoint >= 0x2600 && codePoint <= 0x27BF) //杂项符号与符号字体

10 || codePoint == 0x303D

11 || codePoint == 0x2049

12 || codePoint == 0x203C

13 || (codePoint >= 0x2000 && codePoint <= 0x200F) //14 || (codePoint >= 0x2028 && codePoint <= 0x202F) //15 || codePoint == 0x205F //16 || (codePoint >= 0x2065 && codePoint <= 0x206F) //17 /*标点符号占用区域*/

18 || (codePoint >= 0x2100 && codePoint <= 0x214F) //字母符号

19 || (codePoint >= 0x2300 && codePoint <= 0x23FF) //各种技术符号

20 || (codePoint >= 0x2B00 && codePoint <= 0x2BFF) //箭头A

21 || (codePoint >= 0x2900 && codePoint <= 0x297F) //箭头B

22 || (codePoint >= 0x3200 && codePoint <= 0x32FF) //中文符号

23 || (codePoint >= 0xD800 && codePoint <= 0xDFFF) //高低位替代符保留区域

24 || (codePoint >= 0xE000 && codePoint <= 0xF8FF) //私有保留区域

25 || (codePoint >= 0xFE00 && codePoint <= 0xFE0F) //变异选择器26 //|| (codePoint >= U + 2600 && codePoint <= 0xFE0F)

27 || codePoint >= 0x10000; //Plane在第二平面以上的,char都不可以存,全部都转

28

29 }30 ///

31 ///检测是否有emoji字符32 ///

33 ///

34 ///

35 public static boolcontainsEmoji(String source)36 {37 if (string.IsNullOrEmpty(source))38 {39 return false;40 }41

42 int len =source.Length;43

44 for (int i = 0; i < len; i++)45 {46 char codePoint =source[i];47

48 if(isEmojiCharacter(codePoint))49 {50 //do nothing,判断到了这里表明,确认有表情字符

51 return true;52 }53 }54

55 return false;56 }57 ///

58 ///过滤emoji 或者 其他非文字类型的字符59 ///

60 /// param source

61 ///

62 public staticString filterEmoji(String source)63 {64 if(string.IsNullOrWhiteSpace(source))65 {66 return "";67 }68 source = source.Replace("[^\\u0000-\\uFFFF]", "").Replace("??", "");69 if (!containsEmoji(source))70 {71 return source; //如果不包含,直接返回

72 }73 //到这里铁定包含

74 StringBuilder buf = null;75

76 int len =source.Length;77

78 for (int i = 0; i < len; i++)79 {80 char codePoint =source[i];81

82 if (!isEmojiCharacter(codePoint))83 {84 if (buf == null)85 {86 buf = newStringBuilder(source.Length);87 }88

89 buf.Append(codePoint);90 }91 else

92 {93 }94 }95

96 if (buf == null)97 {98 return source; //如果没有找到 emoji表情,则返回源字符串

99 }100 else

101 {102 if (buf.Length ==len)103 {104 //这里的意义在于尽可能少的toString,因为会重新生成字符串

105 buf = null;106 returnsource;107 }108 else

109 {110 returnbuf.ToString();111 }112 }113

114 }115 #endregion

前台

成功……

到此解决了微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!

代码虽然不是最完美的,也有优化的空间,非常感谢群友“燃冰”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值