微信小程序获取用户昵称中含有emoj表情,后端处理方式以及回显。

1、在做微信小程序的时候遇到了用户昵称中含有emoj表情无法入库的情况。

### Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x80' for column 'nick' at row 1
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x98\x80' for column 'nick' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x80' for column 'nick' at row 1

2、错误很明显,用户昵称入库失败,马上想到可能是特殊字符或者表情,首先解决报错,保证流程正常,就是需要把用户昵称中的emoj表情替换掉。

//替换emoj
"??1".replaceAll("[^\\u0000-\\uFFFF]", "?");

3、进一步解决问题,对用户昵称进行编码存库,然后前端获取昵称的时候进行解码,这样小程序可以完整的显示用户昵称。

try {
			System.out.println(Base64.encodeBase64String("?".getBytes("utf-8")));
		} catch (UnsupportedEncodingException e1) {
		}

		String nickname = "8J+NiQ==";
		try {
			nickname = new String(Base64.decodeBase64(nickname.getBytes()), "utf-8");
			System.out.println(nickname);
		} catch (UnsupportedEncodingException e) {

		}

4、这样存在一个问题,就是对所有昵称进行编码之后,后台数据库存储的用户昵称都是编码后的字符,看起很怪。 

5、可以通过设置涉及字段的字符编码,保证这个字段可以存储emoj表情。

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

将nick字段编码字符集 设置为utf8mb4,排序规则utf8mb4_general_ci,这样就可以插入emoj表情,有说法需要重启,我测试的时候不需要重启,设置之后可能还会出现插入错误,需要在配置文件中配置如下的东西。

druid连接池配置如下

<property name="connectionInitSqls" value="set names utf8mb4;"/>
 

BoneCP连接池配置如下

  <property name="initSQL" value="set names utf8mb4;"/>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changingshow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值