Js realiza codificación y decodificación base64 (resuelve caracteres confusos chinos)

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_44220845/article/details/119035498
Recomendado
Clasificación