• 微信小程序获取带表情的微信名乱码问题


    在后台获取完微信用户数据后,对微信名进行UTF-8编码

    URLEncoder.encode(nickName, "utf-8")

    ,将编码后的结果储存到数据库中,环境为mysql数据库。

    完整代码:

    /**
         * 解密用户敏感数据
         * @param encryptedData 明文,加密数据
         * @param iv  加密算法的初始向量
         * @param code  用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
         * @return
         */
        @RequestMapping(value = "/decodeUserInfo",method ={ RequestMethod.POST,RequestMethod.GET})
        public JSONObject decodeUserInfo(@RequestParam(value = "encryptedData")String encryptedData, @RequestParam(value = "iv")String iv, @RequestParam(value = "code")String code){
            JSONObject result=new JSONObject();
            try {
                /**
                 *  如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),
                 *  可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。
                 *  换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
                 *  前提是微信开放平台认证绑定了才可以获取到unionid否则只有openid
                 */
                result=WechatUtil.getDeCodeUserInfo(encryptedData,WechatUtil.getSessionKeyAndOpenid(code,requestUrl,appid,appSecret).getString("session_key"),iv);
                WechatInfo wechatInfo=new WechatInfo();
                wechatInfo.setUserAvatarUrl(result.getString("avatarUrl"));
                String nickName = result.getString("nickName");//获取用户名
                wechatInfo.setUserNickName(URLEncoder.encode(nickName, "utf-8"));//将微信昵称用utf-8编码后储存
                wechatInfo.setOpenId(result.getString("openId"));
                result.put("isDept",wechatInfoService.execWechatInfo(wechatInfo));
                logger.info("解密后的信息"+result.toString());
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.getMessage());
            }
            return result;
        }

    读取微信名的时候,在实体类内定义一个新属性,用来接收解码后的微信名,供页面显示。

       //UTF-8编码后的字符
        private String userNickNameUTF8;
    
        public String getUserNickNameUTF8() {
            try {
                //UTF-8解码后的字符
                return URLDecoder.decode(userNickName, "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return "";
        }
    
        public void setUserNickNameUTF8(String userNickNameUTF8) {
            this.userNickNameUTF8 = userNickNameUTF8;
        }

    需要注意的是:存储时,使用的是实体中与数据库字段相对应的属性;而读取的时候,使用的实体中新定义的属性。

  • 相关阅读:
    Linux从入门到进阶全集——【第十四集:Shell编程】
    cmake 编译 c++ dll 的一个例子
    %1 不是有效的Win32应用程序
    C++ 生成 dll 和调用 dll 的方法实例(转)
    Clion cmake 一个简单的 C++ 程序
    一月4
    一月4日
    1月4日
    一月4日
    一月4日
  • 原文地址:https://www.cnblogs.com/zh-1721342390/p/9353242.html
Copyright © 2020-2023  润新知