微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
2017-12-18 15:52
941 查看
最近做的项目,上线后一切正常,过段时间管理员反馈用户导出EXCEL报错,前台获取用户列表不显示,查找问题找到是微信昵称、emoji表情导致报错,
emoji表情介绍
由于微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没有解码,表现就是当收到微信端用户发来的emoji表情时,显示为一个方块型「」或是无法显示的字符,这时就需要对其进行转码。
每个emoji表情其实都有相应的unicode编码,在解析用户向公众号发送的文字中的emoji表情字符时,我们可以根据unicode码来匹配或存储信息中的emoji表情;同理在向用户发送包含emoji表情的文字消息时,则将表情字符根据unicode编码进行二进制转码后再发送。
找网上各种,全是PHP和JAVA拿来试验一下,没解决问题,坑~~~,继续寻找,然后改造和请教群友,解决此问题
我使用的简单粗暴的方法,直接过滤到了emoji编码,暂时没有发现误伤:
前台
成功……
到此解决了微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
代码虽然不是最完美的,也有优化的空间,非常感谢群友“燃冰”。
emoji表情介绍
由于微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没有解码,表现就是当收到微信端用户发来的emoji表情时,显示为一个方块型「」或是无法显示的字符,这时就需要对其进行转码。
每个emoji表情其实都有相应的unicode编码,在解析用户向公众号发送的文字中的emoji表情字符时,我们可以根据unicode码来匹配或存储信息中的emoji表情;同理在向用户发送包含emoji表情的文字消息时,则将表情字符根据unicode编码进行二进制转码后再发送。
找网上各种,全是PHP和JAVA拿来试验一下,没解决问题,坑~~~,继续寻找,然后改造和请教群友,解决此问题
我使用的简单粗暴的方法,直接过滤到了emoji编码,暂时没有发现误伤:
#region 去掉表情符号 /// <summary> /// 去掉表情符号 /// </summary> /// <param name="codePoint"></param> /// <returns></returns> public static bool isEmojiCharacter(char codePoint) { return (codePoint >= 0x2600 && codePoint <= 0x27BF) // 杂项符号与符号字体 || codePoint == 0x303D || codePoint == 0x2049 || codePoint == 0x203C || (codePoint >= 0x2000 && codePoint <= 0x200F) // || (codePoint >= 0x2028 && codePoint <= 0x202F) // || codePoint == 0x205F // || (codePoint >= 0x2065 && codePoint <= 0x206F) // /* 标点符号占用区域 */ || (codePoint >= 0x2100 && codePoint <= 0x214F) // 字母符号 || (codePoint >= 0x2300 && codePoint <= 0x23FF) // 各种技术符号 || (codePoint >= 0x2B00 && codePoint <= 0x2BFF) // 箭头A || (codePoint >= 0x2900 && codePoint <= 0x297F) // 箭头B || (codePoint >= 0x3200 && codePoint <= 0x32FF) // 中文符号 || (codePoint >= 0xD800 && codePoint <= 0xDFFF) // 高低位替代符保留区域 || (codePoint >= 0xE000 && codePoint <= 0xF8FF) // 私有保留区域 || (codePoint >= 0xFE00 && codePoint <= 0xFE0F) // 变异选择器 // || (codePoint >= U + 2600 && codePoint <= 0xFE0F) || codePoint >= 0x10000; // Plane在第二平面以上的,char都不可以存,全部都转 } /// <summary> /// 检测是否有emoji字符 /// </summary> /// <param name="source"></param> /// <returns></returns> public static bool containsEmoji(String source) { if (string.IsNullOrEmpty(source)) { return false; } int len = source.Length; for (int i = 0; i < len; i++) { char codePoint = source[i]; if (isEmojiCharacter(codePoint)) { //do nothing,判断到了这里表明,确认有表情字符 return true; } } return false; } /// <summary> /// 过滤emoji 或者 其他非文字类型的字符 /// </summary> /// <param name="source">param source</param> /// <returns></returns> public static String filterEmoji(String source) { if(string.IsNullOrWhiteSpace(source)) { return ""; } source = source.Replace("[^\\u0000-\\uFFFF]", "").Replace("??", ""); if (!containsEmoji(source)) { return source; //如果不包含,直接返回 } //到这里铁定包含 StringBuilder buf = null; int len = source.Length; for (int i = 0; i < len; i++) { char codePoint = source[i]; if (!isEmojiCharacter(codePoint)) { if (buf == null) { buf = new StringBuilder(source.Length); } buf.Append(codePoint); } else { } } if (buf == null) { return source; //如果没有找到 emoji表情,则返回源字符串 } else { if (buf.Length == len) { //这里的意义在于尽可能少的toString,因为会重新生成字符串 buf = null; return source; } else { return buf.ToString(); } } } #endregion
前台
成功……
到此解决了微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
代码虽然不是最完美的,也有优化的空间,非常感谢群友“燃冰”。
相关文章推荐
- 解决AspNet中DataGrid GridView等列表控件导出Excel长数字显示成科学计数法的问题
- php解决微信开发中用户昵称中的特殊字符与emoji表情写入mysql错误的问题
- 关于微信表情及输入法emoji显示问题解决方案
- 教你如何将txt复制到excel的各个单元格;并解决科学计数法显示问题及导致的个位数变0问题
- 解决微信登录时昵称中包含特殊字符,不能存入数据库问题
- 分页列表td中包含有<标签导致页面显示错乱问题,使用jstl <c:out>标签秒解决
- datagridview中显示的数据导出到Excel——用最简单的方法解决科学计数法的问题
- 教你如何将txt复制到excel的各个单元格;并解决科学计数法显示问题及导致的个位数变0问题
- jsp导出excel身份证过长导致显示不正常自定义单元格格式解决方法
- 解决easyui动态隐藏或显示列导致列表排版错乱的问题
- java_HSSFWorkbook导出Excel(已解决合并单元格显示部分边框问题)
- 关于excel 导出数字类型变成科学记数法的问题解决 导出EXCEL后格式的问题 科学记数法 显示
- 导出excel,解决用HTML网格线(Gridlines) 不显示问题
- 解决微信昵称含特殊表情或字符无法存入数据库异常
- 解决微信昵称特殊字符存放数据库报错问题
- php导出excel(xls或xlsx)(解决长数字显示问题)
- 导出excel身份证过长导致显示不正常自定义单元格格式解决方法
- gridview操作excel导出时解决显示成科学计数法的问题
- 微信小程序开发过程中tabbar页面显示的相关问题及解决办法
- 解决access 导出 excel 字段截断错误的问题