• Js进行base64编码、解码、中文乱码


    常规方法:编码
    // base64转字符串
    getEncode64(str){
    // 对字符串进行编码
    var encode = encodeURI(str);
    // 对编码的字符串转化base64
    var base64 = btoa(encode);
    return base64;
    },
    解码:
    // base64转字符串
    getDecode(str){
    // 对base64转编码
    var decode = atob(base64);
    // 编码转字符串
    var str = decodeURI(decode);
    return str;
    },
    使用方法:
    let url = ‘http://百度.com’
    //转base64编码
    let base64Url = this.getEncode64(url);

    //解码 后台返回JSON格式所以加了JSON.parse进行json解码,正常对象格式就不用加
    let data =JSON.parse(this.getDecode(resp.data));
    console.log(data);
    问题:
    用上述的编码和解码,自己前端操作编译和解码中文都是没有问题的,但是由于需要后台,编码后传输到后台,后台返回编码格式再解码的时候就会出现中文乱码。

    原因:
    一番查找下来,可能是由于 常规的encode方法虽然界面上转的是utf-8,但是实际上传输存储的时候格式还是utf-16,后台返回的是utf-8格式,用decode界面实际上转的是utf-16,转utf-8会出现中文乱码。也就是说上述的编码和解码,适用于页面本身编码解码,不适合传输用。

    解决解码中文乱码:
    //字符串转base64
    getEncode64(str){
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
    function toSolidBytes(match, p1) {
    return String.fromCharCode(‘0x’ + p1);
    }));

    },
    getDecode(str){
    return decodeURIComponent(atob(str).split(‘’).map(function © {
    return ‘%’ + (‘00’ + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(‘’));
    },
    用这两个编码和解码就正常了,encodeURIComponent是转utf-8

  • 相关阅读:
    <C++>入门新概念
    日常学习记录随笔-seata
    【读书笔记】《Head First设计模式(中文版)》【TBC】
    opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值
    Linux操作系统作业
    python3-python中的多任务处理利器-协程的使用(一),asyncio模块的使用
    责任链模式
    添加阿里云maven镜像
    Linux系统挂载硬盘
    基于单片机GSM的防火防盗系统的设计
  • 原文地址:https://blog.csdn.net/weixin_44324124/article/details/125539515