最近做的项目,上线后一切正常,过段时间管理员反馈用户导出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报错等问题解决!

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

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

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

    微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! 参考文章: (1)微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决! (2)https:// ...

  2. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤

    前言 微信昵称现在五花八门,可以加入各种表情符号.这些符号存储到mysql数据库时存在一些问题.这里记录下我的解决方法. 问题 第一种方案:修改数据库编码,支持存储emoji表情 mysql的utf8 ...

  3. 基于微信小程序云开(统计学生信息并导出excel)2.0版

    前言 随着移动端的不断发展,人们大部分的办公及生活应用都开始趋向于移动端.然而在2017年"微信之父"张小龙带领团队,开发了一款叫做微信小程序的东西,它的出现打破了人们认识移动端的 ...

  4. 数据库存储微信昵称emoji表情

    在做微信小程序保存用户信息(昵称中带emoji表情)时,报错: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' fo ...

  5. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  6. java ipone 微信昵称emoji表情保存失败 无法存入数据库

    问题描述:ipone5s中昵称输入"emoji 表情",保存数据库有问题. 运行环境:Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题) ...

  7. (转)处理微信昵称emoji方法

    https://blog.csdn.net/tornge/article/details/51272908 移除微信昵称中的emoji字符: function removeEmoji($nicknam ...

  8. PHP处理微信昵称emoji方法

    今天刚做了一个微信应用,在获取微信昵称的过程中报错了,经查原因是微信昵称中包含emoji字符,在写入数据库的时候出错,所以想办法在写入之前把这些字符过滤掉,于是在网上找到一个方法,记录一下. 移除微信 ...

  9. 输入文字加下划线_微信昵称这样设置,文字加上下划线!

    Hi 大家好 我是机哥 今天是周末,最近有小伙伴问,微信带线的昵称是怎样设置的,其实很简单,我们先来看一下. 就是在文字的下面加一条下划线,感觉还是挺与众不同的,这个文字大家可以聊天使用,也可以设置微 ...

  10. java显示一张图片不显示_微信图片不可显示java解决方法

    场景: 微信上传了图片素材,返回了图片url,然后不能在img标签中正常显示. 原因是微信做了图片防盗连接. 解决方法: 原理:使用你的服务端脚本,远程抓取图片,然后输出image/* 格式,就可以了 ...

最新文章

  1. 零基础学Python(第一章 开发工具·最简易的环境·无需配置环境变量)
  2. Nacos自定义 namespace与group配置
  3. DLL入门浅析(5)——使用DLL在进程间共享数据
  4. python 输出引号_python输出字符串单双引号如何选择
  5. 会返回两次_嫦娥五号为何用独特的半弹道式返回方式?原来有更深远的考虑……...
  6. 业务随行:用户的网络访问策略还能这么玩
  7. sqoop2 mysql导入hdfs_Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)
  8. 谷歌为开源的漏扫工具“海啸“发布新的补丁奖励计划
  9. 这么说吧,NIO很简单,其实就是个牛逼IO
  10. 100 个网络基础知识 看完成半个网络高手
  11. 反斜杠(\)加0~127中任何一个数字都会被解析成一个转义字符
  12. 音频压缩算法ALaw,uLaw
  13. 【Python】Pandas DataFrame 一维表二维表的转换
  14. 做到这几点在家也能拍出好看的证件照
  15. 在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?
  16. 2022年第十三届蓝桥杯省赛C/C++B组个人题解
  17. 易语言流程控制程序暂停开始继续
  18. 如何将excel表格导入word_PPT怎样导入Excel表格?PPT导入Excel表格方法
  19. 智慧屏鸿蒙1.0和2.0区别,0到1的过程不容易,首发鸿蒙系统的荣耀智慧屏一文看懂有何优势...
  20. 基于 Spring SSM框架 开发的一套 进存销管理系统

热门文章

  1. js获取当前页面的url
  2. 仓储管理毕业论文【含matlab优化算法】
  3. 【IOS账号分享】《NBA 2K20》
  4. 计算机博士专业目录,tsinghua计算机博士专业目录
  5. C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档
  6. 《CSS实战案例汇总》悬浮按钮样式
  7. 3D虚拟试衣AR换装Kinect体感互动试衣镜魔镜软件
  8. html中响应ocx事件,JS实现OCX控件的事件响应示例
  9. 计算机台账管理需求分析,结合工作经验研究数据中心机房管理统计的需求和实方式论文...
  10. android圆饼图占比