微信昵称添加表情之前可以添加emoji表情的 刚刚想换一个表情就改了,发现保存不

3920人阅读
EMOJI(9)
最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下
Incorrect&string&value&:&'\xF0\x9F\x91\x8D\xE6\x94...'&for&column&'column_x'&at&row&1
在查阅资料后发现这其实是一种emoji表情符号,普遍存在iOS与android系统中,而这种特殊字符合作用的Unicode 6标准来统一,采用4个bytes来存储一个emoji表情,而将这种表情不处理直接存储到MySQL5.5以下的版本会报错,当然想要MySQL存储这种字符也不困难,只需要修改数据库字符集为utf8mb4即可,但数据回传给网页或者移动客户端时则需要做兼容处理,所以我们暂时忽略这种需求,直接将其过滤掉.
对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFilter去过滤需要处理掉的字符串,代码如下
InputFilter&emojiFilter&=&new&InputFilter&(&)&{
&&&&&@Override
&&&&&public&CharSequence&filter&(&CharSequence&source&,&int&start&,&int&end&,&Spanned&dest&,&int&dstart&,
&&&&&&&&&int&dend&)&{
随后我查阅了&&的wikipedia与&&,从中提取出表情的一个大概unicode范围,由于Java可以直接对unicode进行匹配,这样我们可以很省事直接写出Pattern即可,代码如下
InputFilter&emojiFilter&=&new&InputFilter&(&)&{
&&&&&Pattern&emoji&=&Pattern&.&compile&(
&&&&&&&&&&[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]&&,
&&&&&&&&&Pattern&.&UNICODE_CASE&|&Pattern&.&CASE_INSENSITIVE&)&;
&&&&&@Override
&&&&&public&CharSequence&filter&(&CharSequence&source&,&int&start&,&int&end&,&Spanned&dest&,&int&dstart&,
&&&&&&&&&int&dend&)&{
&&&&&&&Matcher&emojiMatcher&=&emoji&.&matcher&(&source&)&;
&&&&&&&if&(&emojiMatcher&.&find&(&)&)&{
&&&&&&&&&return&&&&;
&&&&&&&return&null&;
基本上这样就能过滤掉emoji表情了博客分类:
上周在做微信摄影投票时,遇到这么一个情况,在微信中,如果将用户昵称修改为Emoji表情字符后,再通过hibernate向MySQL存储时,报如下错误:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
at com..jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
原因是:MySQL中utf-8编码,一个字符占3个字节,但是微信Emoji表情字符,它的编码是utf8mb4编码的,一个字符占4个字节。就是因为这个原因,导致插入昵称时失败。
解决方案:
1、修改MySQL中对应表的昵称字段编码格式为utf8mb4;
2、放弃使用hibernate进行数据的存储或更新,改用纯jdbc的方式(hibernate的没研究过,不知道可不可以),代码片段如下:
String username = "root";
String password = "111111";
String className = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/vote?autoReconnect=true&useUnicode=true&characterEncoding=utf-&zeroDateTimeBehavior=convertToNull";
Class.forName(className );
Connection conn = DriverManager.getConnection(url , username , password );
public static Long save(String sql, Object[] params){
Long ret =
ResultSet rs =
Connection conn =
PreparedStatement cmd =
conn = getDBConnection();
conn.setAutoCommit(true);
//通过查询运行设置字符集的命令(这一句是重点)
conn.prepareStatement("set names utf8mb4").executeQuery();
cmd = conn.prepareStatement(sql);
if(params == null || params.length == 0){
return -1L;
for (int i = 0; i & params. i++) {
cmd.setObject(i+1, params[i]);
cmd.executeUpdate();
// 获取最后一条插入数据的自增列值
String sql2 = "select @@IDENTITY";
cmd = conn.prepareStatement(sql2);
rs = cmd.executeQuery();
if (rs.next()) {
ret = Long.parseLong(rs.getObject(1)+"");
} catch (SQLException e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
} finally {
if(cmd != null){
cmd.close();
if(rs != null){
rs.close();
if(conn != null){
conn.close();
} catch (SQLException e) {
e.printStackTrace();
完成上述修改之后,emoji表情字符就可以正常的插入到MySQL中了。
浏览: 420357 次
来自: 北京
不错,短小灵活
我是第一种情况,只是配置jersey框架,报错,我检查了一下实 ...
你好,你的这个,我不知道放在哪个位置。可以分享一下吗?谢谢
有jar包,我没找到可下载的资源 求帮忙
遇到这个问题,请先检查是不是又Path相同了.
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'&>&java ipone 微信昵称emoji表情保存失败 问题解决
java ipone 微信昵称emoji表情保存失败 问题解决
上传大小:21KB
ipone5s中昵称输入“emoji 表情”,保存数据库有问题。
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x80\xE5\xA4...' for column 'nickname' at row 1
综合评分:3(20位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有14条
没用,不建议下载
这个跟我原有的一样,不是我想要的
测试了一下,可以使用,还没有发现问题,后期继续查看
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
java ipone 微信昵称emoji表情保存失败 问题解决
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
java ipone 微信昵称emoji表情保存失败 问题解决[转载]如何给公众微信的文章标题和摘要加emoji表情(教程)
emoji表情是微信默认许可使用的表情。因为emoji的表情代码是可以在手机端是显示出emoji表情的,原理其实跟微信昵称加表情图案一个道理的。
添加表情代码后的效果(由公众微信号发给普通手机微信号)
以下是步骤
一:打开网址:,可以看到最左侧是表情的预览,右边依次是几种类型编码下,这个表情所对应的代码,有Unified、DoCoMo、KDDI&、Softbank、Google
如果以上网址失效,可以下载以下链接的文件
然后打开里面“table.htm”文件,显示出来的内容跟上面的网址里面的内容一摸一样,这就是个离线版的。
二,选择一个喜欢的表情,比如,然后复制右边对应的代码“U+2600”
然后另外一个网址:,在这个网页内,可以搜索一下“U+2600”,找到对应的替代表情字符,如下图
将右侧的那个表情符号(蓝色框内),复制到公众微信的标题和摘要编辑框,即可!然后预览下,你就可以在手机看到你要的表情了。
值得一提的是,有些表情的替代字符,网页或者word或者记事本都显示不出来或者只显示了一个小方框,例如
“U+25FC”和“U+1F004”,如下图
可以看到,只显示方框或者什么都不显示。没事,你只要跟上面的步骤一样,直接移动你的鼠标光标,选定这个区域(空白方框区域或者什么都不显示的对应区域),然后黏贴到公众微信上,预览下,手机照样可以显示。
注意:如果第二步里的网址失效,可以直接用下面的文件,直接打开(也是离线版的)
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 微信添加emoji表情包 的文章

 

随机推荐