首页 > 其他分享 >Js进行base64编码解码(解决中文乱码)

Js进行base64编码解码(解决中文乱码)

时间:2022-11-12 12:24:28浏览次数:48  
标签:编码 return 解码 base64 Js 乱码 str utf

常规方法:编码

// base64转字符串
 getEncode64(str){
     // 对字符串进行编码
     var encode = encodeURI(str);
     // 对编码的字符串转化base64
     var base64 = btoa(encode);
     return base64;
   },

解码:

// base64转字符串
   getDecode(str){
      // 对base64转编码
      var decode = atob(str);
      // 编码转字符串
      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 (c) {
          return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
      }).join(''));
  },

用这两个编码和解码就正常了,encodeURIComponent是转utf-8

标签:编码,return,解码,base64,Js,乱码,str,utf
From: https://www.cnblogs.com/panwudi/p/16883447.html

相关文章

  • 涨姿势了,这 4 个场景可用 CSS 完全取代 JS ~
    本篇通译自:​​#It’s2022.SometimesYouDon’tNeedJavascriptatAll​​1.颜色选择器我们通常需要通过复杂的JavaScript来实现一个类似下图的颜色选择器组件。好......
  • Jsp中EL表达式不起作用
    困扰了很久的JSP中的表达式被当成字符串处理,原因是出于版本不同,有些isELIgnored属性默认值为false,但有些默认为true;所以这里要手动配置isELIgnored的属性为false<%@pag......
  • 使用python保存网页时print能显示正常,html打开中文乱码问题
             ......
  • nodejs 遍历文件夹下所有文件
    constfs=require("fs");letfileArr=[];constdir="E:/Hbuilder-Content/7.19新增页面";main(dir);console.log(fileArr);functionmain(currentPath){......
  • src/mixin/showButton.js
    exportdefault{//按钮权限methods:{showBtn(code){return(this.$store.state.user.userInfo.roles&&this.$store.state.user.......
  • store/user.js
    //解决:切换帐号时上一帐号权限会影响下一帐号import{resetRouter}from'@/router'//删除用户信息与tokenlogout(state){state.token=''state......
  • 9. JS的数据类型,区别
    js有2大数据类型分类: 基本数据类型:1.string字符串使用单、双引号包裹,或者使用反引号包裹2.number数字类型3.boolean布尔值truefalse ......
  • Export2Excel.js
    /*eslint-disable*///1:下载file-saverxlsx,如果出现问题,如果以前是yarn,先执行yarn如果还不行,再执行npmi再运行,如果还不行自行调整版本yarnadd插件名@版......
  • Export2Zip.js
    /*eslint-disable*/import{saveAs}from'file-saver'importJSZipfrom'jszip'exportfunctionexport_txt_to_zip(th,jsonData,txtName,zipName){const......
  • Node.js fs API docs All In One
    Node.jsfsAPIdocsAllInOneModules:node:moduleAPICJS//module.cjs//InaCommonJSmoduleconstbuiltin=require('node:module').builtinModules;......