Js进行base64编码解码(解决中文乱码)
常规方法:编码
// 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
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!