最近在发微信公众号模版消息时遇到一个问题,如果用户的nickname中有表情,那么消息的字体颜色就会发生变化,像这样:

这个问题应该是微信的问题,所以我们不能解决掉这个bug,只能等腾讯爸爸来修复。唯一能做的就是去除掉字符串中的表情,下面是具体代码。

/*** 判断字符串中是否含有表情* @param source* @return*/public static boolean containsEmoji(String source) {int len = source.length();boolean isEmoji = false;for (int i = 0; i < len; i++) {char hs = source.charAt(i);if (0xd800 <= hs && hs <= 0xdbff) {if (source.length() > 1) {char ls = source.charAt(i + 1);int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;if (0x1d000 <= uc && uc <= 0x1f77f) {return true;}}} else {// non surrogateif (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {return true;} else if (0x2B05 <= hs && hs <= 0x2b07) {return true;} else if (0x2934 <= hs && hs <= 0x2935) {return true;} else if (0x3297 <= hs && hs <= 0x3299) {return true;} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d|| hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c|| hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) {return true;}if (!isEmoji && source.length() > 1 && i < source.length() - 1) {char ls = source.charAt(i + 1);if (ls == 0x20e3) {return true;}}}}return isEmoji;}
/*** 判断某个字符是不是表情* @param codePoint* @return*/private static boolean isEmojiCharacter(char codePoint) {return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)|| (codePoint == 0xD)|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));}
/*** 过滤掉字符串中的表情* @param source* @return*/public static String filterEmoji(String source) {if (StringUtils.isBlank(source)) {return source;}StringBuilder buf = null;int len = source.length();for (int i = 0; i < len; i++) {char codePoint = source.charAt(i);if (isEmojiCharacter(codePoint)) {if (buf == null) {buf = new StringBuilder(source.length());}buf.append(codePoint);}}if (buf == null) {return source;} else {if (buf.length() == len) {buf = null;return source;} else {return buf.toString();}}}

Java代码判断字符串中是否含有表情相关推荐

  1. MATLAB 判断字符串中是否含有特定的字符

    这个程序的目的是,逐行读取file.txt文件中的字符串,并判断字符串中是否含有特定的字符,如果含有,再对字符串进行处理,然后写入到新的TXT文档中new_file.txt [plain] view ...

  2. Android和Java检查字符串中是否含有表情符并和谐(替换)

    最近项目里读取文本的内容里含有了表情符,传递给后端后无法存入数据库,虽然现在后端修复了,但是我还是想自己过滤,百度了一下发现网上csdn有大量此类代码但是几乎都有错误在里面不知道是不是故意有人为之,特 ...

  3. Java代码判断数据库中某张表是否存在

    最近在开发一个同步数据的统计任务的时候遇到一个问题:要在Java代码中判断数据库中某张表是否存在,查资料后,总结了以下两种方法: 1.使用JdbcTemplate bean public boolea ...

  4. Java如何判断字符串中包含有全角,半角符号

    一.全角跟半角之间的区别 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉 ...

  5. Java如何判断字符串中包含有全角,半角符号,以及去除中文

    全角:是指中GB2312-80(<信息交换用汉字编码字符集·基本集>)中的各种符号. 半角:是指英文件ASCII码中的各种符号. 全角状态下字母.数字符号等都会占两个字节的位置,也就是一个 ...

  6. java containsany_判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...

    我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...

  7. 判断字符串中是否含有并一个字符或字符串

    <script type="text/javascript">//判断字符串是否包含某个字符或字符串/** js里面有indexof()方法* es6中新增了三种方法, ...

  8. java 如何判断字符串中包含有全角,半角符号

    参考链接:http://www.cnblogs.com/Ant-soldier/p/6373766.html 1.通过字符编码的范围进行判断. ascii编码对照http://tool.oschina ...

  9. uniapp 判断字符串中是否包含表情

    var emouji = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g;if(emouji.test('需要被判断的字符串')){console.log ...

最新文章

  1. C语言中文件的读写(fputc和fgetc)(putchar和getchar)
  2. 2.2. php://stdin php://stdout
  3. 《Effective C#》Item 15:利用using和try-finally来释放资源
  4. socket通信入门
  5. SAP中过账码or记账码posting code
  6. JavaScript公共运行库
  7. 四则运算关于加括号的思路
  8. 项目学生:带有Jersey的Web服务客户端
  9. Windows系统安全从定制IP策略开始
  10. UE3 贴图支持及设置
  11. Cocos2d-x特殊节点对象(瓦片地图、粒子系统、视差滚动)概述
  12. 财务人员福音,财务收支报告模板
  13. 2021年最值得推荐的10款数据可视化工具,看完我收藏了
  14. Web服务器、应用服务器、数据库服务器之间的关系
  15. 利用java实现提现金额到支付宝账户的功能
  16. Linux中系统的分区管理
  17. 求求你,商用项目不要再使用jsdelivr的CDN服务了
  18. 10进制,8进制,16进制转换
  19. INTRODUCING F#
  20. Spring Data MongoDB 多个条件或查询

热门文章

  1. 解决 have unmet dependencies: youdao-dict :
  2. Hexo更换主题教程
  3. postgresql 免安装版本
  4. 计算机卸载或更改程序软件消失,win10系统控制面板“卸载或更改程序”窗口不显示已安装软件的还原方案...
  5. SQLite封锁机制
  6. Entrust Datacard将从泰雷兹手中收购市场领先的通用硬件安全模块业务
  7. 高瓴资本张磊:选择比努力重要,与谁同行比要去的远方重要
  8. BZOJ3894 文理分科
  9. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式
  10. 迅为iTOP6818开发板QtE5.7应用例程源码