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报错等问题解决!
代码虽然不是最完美的,也有优化的空间,⾮常感谢友“燃冰”。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论