import org.apache.commons.lang.StringUtils;
/**
* 微信特殊字符 emoji 过滤器
* @Description:
* date: 2015-4-7
* time: 下午4:27:44
* author: <a href="http://chris-rock-f0.iteye.com/">烧猪</a>
*/
public class EmojiFilter {
/**
* 检测是否有emoji字符
* @param source
* @return 一旦含有就抛出
*/
public static boolean containsEmoji(String source) {
if (StringUtils.isBlank(source)) {
return false;
}
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
//do nothing,判断到了这里表明,确认有表情字符
return true;
}
}
return false;
}
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));
}
/**
* 过滤emoji 或者 其他非文字类型的字符
* @param source
* @return
*/
public static String filterEmoji(String source) {
if (!containsEmoji(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);
} else {
}
}
if (buf == null) {
return source;//如果没有找到 emoji表情,则返回源字符串
} else {
if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
buf = null;
return source;
} else {
return buf.toString();
}
}
}
}
原理解析:
由于Android 或 IOS 的设备里 的一些 特殊字符或者表情符号,在获取微信服务器的联系人昵称时会出现乱码,当写入本地 MySQL 数据库时会出错, 所以需要进行过滤
出错的原因:
MySQL的字节是3位,特殊字符是4字节.
有条件的可以自行修改字符集(听说utf8mb4可以解决,要求改连接字符串的编码和数据库字段的编码,未测试,群内朋友给出的解决方案)
分享到:
相关推荐
本问题涉及的是一个典型的Java、iPhone和微信环境下的emoji表情存储问题。当iPhone 5s用户尝试在昵称中使用emoji表情时,这些表情无法成功保存到MySQL数据库中,导致报出"java.sql.SQLException: Incorrect string ...
主要介绍了PHP正则过滤处理微信昵称中emoji字符的方法,结合实例形式分析了php基于正则过滤删除微信昵称中emoji字符的相关操作技巧,并附带了一个简单的正则回调过滤操作示例,需要的朋友可以参考下
微信支付统一下单接口body中文乱码问题,接口一直报错“body不是utf-8类型”的解决
随着数字技术的飞速发展,各种应用程序和软件工具层出不穷,其中不乏一些旨在模拟社交媒体交互的应用,如微信对话转账生成器(电脑版V4.4绿色版)。该软件专为电脑用户设计,无需安装即可直接运行(绿色版特性),...
我在用mysql 保存微信昵称,当插入昵称数据的时候,报错。于是做了如下工作: 一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8...
『微信竖直昵称』一键生成微信垂直昵称,让你拥有好友列表里最独一无二的昵称/朋友圈,还在等什么?靓仔,赶快下载试试吧!
微信提供了OAuth2.0接口,允许第三方应用引导微信用户授权,从而获取用户的基本信息。这个过程分为以下几个步骤: 1. **获取code**:首先,你需要在你的PHP应用中创建一个链接,引导用户跳转到微信的授权页面。这个...
微信授权登录(新版 获取昵称、头像、手机号) 插件内使用内置弹窗特效:uni-popup 1. 本插件需要申请的系统权限列表: 无 2. 本插件采集的数据、发送的服务器地址、以及数据用途说明: 无 3. 本插件是否包含广告...
微信电脑版旧版微信限制登录修复器是一款专为解决微信客户端旧版本无法正常登录问题而设计的工具。在日常使用中,有时我们会遇到微信官方为了维护系统安全和更新功能,会限制某些旧版本的微信登录。这使得用户无法...
微信小程序开发附源码:Vue.js 实现微信公众号菜单编辑器功能(二)
由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS ### View Filter filter 理解为...
微信Windows版多开器
微信公众号图文编辑器图文编辑器图文编辑器 关注微信公众号孝客之乡,大家一起进步。
不少网友喜欢在朋友圈晒一些好玩的微信对话,当然,有一些微信对话是自己编辑。那么,微信对话怎么自己编辑呢?微信界面聊天生成器!
微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码...
生成微信聊天界面,头像昵称内容都可以自己设置
微信支付宝搞笑对话生成器 微信支付宝搞笑对话生成器 微信支付宝搞笑对话生成器 微信支付宝搞笑对话生成器 微信支付宝搞笑对话生成器 微信支付宝搞笑对话生成器
微信交易纪录导出助手