Skip to content

JavaScript对中文进行base64编码报错

  • 知识点:btoa 和 atob 是window对象的两个函数

  • btoa(binary to ascii):用于将binary的数据用ascii码表示,即Base64的编码过程

  • atob(ascii to binary):用于将ascii码解析成binary数据,即Base64的解码过程

  • 使用btoa对中文进行编码时报错

    javascript
    InvalidCharacterError: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

    image-20250711140837412

  • 问题原因:因为 btoa 仅支持 ASCII 字符序列,所以对 Unicode 字符编码使用 bota 是不行的

  • 解决方式

    • 编码:Unicode字符 -------> 先encodeURI -------> 再btoa编码

      javascript
      var rawStr = "好好学习";
       
      var encryptedStr = btoa(encodeURIComponent(rawStr));
       
      console.log(encryptedStr); // JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw
    • 解码:先atob解码 -------> 再decodeURI -------> Unicode字符

      javascript
      var encryptedStr = 'JUU1JUE1JUJEJUU1JUE1JUJEJUU1JUFEJUE2JUU0JUI5JUEw';
       
      var rawStr = decodeURIComponent(atob(encryptedStr));
       
      console.log(rawStr); // 好好学习

MIT版权,未经许可禁止任何形式的转载