Enfoque general: codificación
// base64转字符串
getEncode64(str){
// 对字符串进行编码
var encode = encodeURI(str);
// 对编码的字符串转化base64
var base64 = btoa(encode);
return base64;
},
descodificación:
// base64转字符串
getDecode(str){
// 对base64转编码
var decode = atob(base64);
// 编码转字符串
var str = decodeURI(decode);
return str;
},
Instrucciones:
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);
pregunta:
Usando la codificación y decodificación anterior, no hay problema en compilar y decodificar chino en sus propias operaciones de front-end. Sin embargo, debido a la necesidad de un fondo, después de la codificación, se transmite al fondo. Cuando el fondo regresa al fondo formato de codificación y luego decodifica, aparecerán caracteres chinos confusos.
razón:
Después de algunas búsquedas, puede deberse a que, aunque el método de codificación convencional convierte UTF-8 en la interfaz, el formato sigue siendo UTF-16 cuando se transmite y almacena, y el formato UTF-8 se devuelve en segundo plano. en realidad convierte El formato es utf-16, y cuando se convierte a utf-8, aparecerán caracteres chinos confusos. En otras palabras, la codificación y decodificación anteriores son adecuadas para codificar y decodificar la página en sí, pero no son adecuadas para la transmisión.
Resuelva la decodificación de caracteres chinos confusos:
//字符串转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(''));
},
Es normal utilizar estas dos codificaciones y decodificaciones, encodeURIComponent se convierte a utf-8.