微信小程序用户昵称emoji乱码问题

保存用户昵称到数据库发现乱码.

由于我已经设置了mysql utf8mb4,客户端传给服务器数据也已经urlencode,部分表情也是是能正常保存的,逐步排除,确认乱码的emoji是由于客户端发过来的emoji编码有问题,这些有问题的emoji是3字节,但是要知道utf-8里的emoji都是4字节,也就意味着在utf-8标准emoji里没有对应的编码,也就无法解析。

接下来的问题就变为了如何将特殊的3字节emoji转换成4字节标准emoji,幸运的是我发现将3字节emoji字符复制到pc微信客户端,能自动转换为4字节标准emoji,于是问题得到解决。

其实还有部分微信支持的emoji是没有标准utf-8编码的,因此这部分只能忽略。
因此本文的方案并不算完美。

func SpEmojiToNormalEmoji(s string) string {
	data := map[string]string{
		"%EE%80%83": "?",
		"%EE%80%8A": "?",
		"%EE%80%8D": "?",
		"%EE%80%91": "✌",
		"%EE%80%99": "?",
		"%EE%80%9A": "?",
		"%EE%80%9C": "⛵",
		"%EE%80%9D": "✈",
		"%EE%80%A1": "❗",
		"%EE%80%A2": "❤",
		"%EE%80%A3": "?",
		"%EE%80%B0": "?",
		"%EE%80%B2": "?",
		"%EE%80%B3": "?",
		"%EE%80%B4": "?",
		"%EE%80%B5": "?",
		"%EE%80%B6": "?",
		"%EE%80%BE": "?",
		"%EE%81%81": "?",
		"%EE%81%86": "?",
		"%EE%81%88": "⛄",
		"%EE%81%89": "☁",
		"%EE%81%8A": "☀",
		"%EE%81%8B": "☔",
		"%EE%81%8C": "?",
		"%EE%81%8F": "?",
		"%EE%81%90": "?",
		"%EE%81%92": "?",
		"%EE%81%93": "?",
		"%EE%81%94": "?",
		"%EE%81%96": "?",
		"%EE%81%97": "?",
		"%EE%81%99": "?",
		"%EE%81%9A": "?",
		"%EE%84%85": "?",
		"%EE%84%86": "?",
		"%EE%84%8A": "?",
		"%EE%84%8B": "?",
		"%EE%84%8D": "?",
		"%EE%84%8E": "?",
		"%EE%84%90": "?",
		"%EE%84%93": "?",
		"%EE%84%95": "?",
		"%EE%84%98": "?",
		"%EE%84%99": "?",
		"%EE%84%9A": "?",
		"%EE%84%9B": "?",
		"%EE%84%9D": "?",
		"%EE%84%AC": "〽",
		"%EE%84%AF": "?",
		"%EE%84%B6": "?",
		"%EE%84%B9": "?",
		"%EE%84%BB": "?",
		"%EE%84%BC": "?",
		"%EE%84%BD": "⚡",
		"%EE%84%BE": "?",
		"%EE%85%8C": "?",
		"%EE%88%81": "?",
		"%EE%88%84": "?",
		"%EE%88%8C": "♥",
		"%EE%88%9F": "4⃣",
		"%EE%88%B0": "?",
		"%EE%88%B1": "?",
		"%EE%88%B6": "↗",
		"%EE%88%B7": "↖",
		"%EE%89%8E": "©",
		"%EE%89%8F": "®",
		"%EE%89%93": "?",
		"%EE%8C%81": "?",
		"%EE%8C%83": "?",
		"%EE%8C%84": "?",
		"%EE%8C%85": "?",
		"%EE%8C%86": "?",
		"%EE%8C%87": "?",
		"%EE%8C%8D": "㊗",
		"%EE%8C%90": "?",
		"%EE%8C%92": "?",
		"%EE%8C%94": "?",
		"%EE%8C%98": "?",
		"%EE%8C%9C": "?",
		"%EE%8C%9D": "?",
		"%EE%8C%A2": "?",
		"%EE%8C%A4": "?",
		"%EE%8C%A6": "?",
		"%EE%8C%A7": "?",
		"%EE%8C%A8": "?",
		"%EE%8C%A9": "?",
		"%EE%8C%AA": "?",
		"%EE%8C%AB": "?",
		"%EE%8C%AC": "?",
		"%EE%8C%AD": "?",
		"%EE%8C%AE": "✨",
		"%EE%8C%AF": "⭐",
		"%EE%8C%B0": "?",
		"%EE%8C%B1": "?",
		"%EE%8C%B3": "❌",
		"%EE%8C%B5": "?",
		"%EE%8C%BA": "?",
		"%EE%8C%BC": "?",
		"%EE%8D%85": "?",
		"%EE%8D%86": "?",
		"%EE%8D%87": "?",
		"%EE%8D%88": "?",
		"%EE%8D%8B": "?",
		"%EE%90%82": "?",
		"%EE%90%8A": "?",
		"%EE%90%8B": "?",
		"%EE%90%8C": "?",
		"%EE%90%90": "?",
		"%EE%90%92": "?",
		"%EE%90%95": "?",
		"%EE%90%98": "?",
		"%EE%90%99": "?",
		"%EE%90%9B": "?",
		"%EE%90%9C": "?",
		"%EE%90%9D": "?",
		"%EE%90%9F": "?",
		"%EE%90%A0": "?",
		"%EE%90%A3": "?",
		"%EE%90%A4": "?",
		"%EE%90%A8": "?",
		"%EE%90%A9": "?",
		"%EE%90%B7": "?",
		"%EE%90%B9": "?",
		"%EE%90%BB": "?",
		"%EE%90%BE": "?",
		"%EE%90%BF": "?",
		"%EE%91%84": "?",
		"%EE%91%85": "?",
		"%EE%91%87": "?",
		"%EE%91%88": "?",
		"%EE%91%89": "?",
		"%EE%91%8A": "?",
		"%EE%91%8C": "?",
		"%EE%94%82": "?",
		"%EE%94%83": "?",
		"%EE%94%85": "?",
		"%EE%94%93": "??",
		"%EE%94%99": "?",
		"%EE%94%9C": "?",
		"%EE%94%9E": "?",
		"%EE%94%9F": "?",
		"%EE%94%A0": "?",
		"%EE%94%A1": "?",
		"%EE%94%A2": "?",
		"%EE%94%A4": "?",
		"%EE%94%A8": "?",
		"%EE%94%AB": "?",
		"%EE%94%AC": "?",
		"%EE%94%AD": "?",
		"%EE%94%AE": "?",
		"%EE%94%B6": "?",
		"%EE%A0%90": "",
		"%EE%A0%BA": "",
	}
	s = url.QueryEscape(s)
	for k, v := range data {
		s = strings.Replace(s, k, url.QueryEscape(v), -1)
	}
	s, _ = url.QueryUnescape(s)
	return s
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值