错误信息: Failed to execute 'atob' on 'Window': The string to be decoded is not corr...

2026年04月24日 00:33 processing

错误信息

错误名称: InvalidCharacterError 错误信息: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. 堆栈信息: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. at convertBase64ToUint8Array (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:50161:23) at detectMediaType (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:98814:52) at file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:104542:24 at Array.map (<anonymous>) at generateImage (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:104538:32) at async PluginEngine.executeImageWithPlugins (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:149395:19) at async AiProvider.modernGenerateImage (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:348573:18) at async AiProvider.generateImage (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:348559:10) at async fetchImageGeneration (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:348823:17) at async transformMessagesAndFetch (file:///D:/%E5%90%84%E7%B1%BB%E5%BA%94%E7%94%A8/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-BIiyx8Gb.js:348689:4) 错误原因: "[undefined]"

AI 解决方案

报错分析报告

1.错误翻译


原文:Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
译文:在「Window」对象上执行「atob」方法失败:待解码的字符串编码格式不正确。

2.原因分析


  • 根本原因:传递给atob函数的字符串不符合Base64编码规范(含非法字符、填充错误或非Base64内容)。

  • 发生位置convertBase64ToUint8Array函数(堆栈第1行),上下文是尝试将无效字符串解码为Uint8Array。
  • 3.解决方案


    // 修复后的安全解码函数(替换原convertBase64ToUint8Array中的atob调用)
    function convertBase64ToUint8Array(base64String) {
      // 1. 清理非法字符(移除空格、换行等非Base64字符)
      const cleanStr = base64String.replace(/[^A-Za-z0-9+/=]/g, '');
      // 2. 补全Base64填充(长度需为4的倍数)
      const paddedStr = cleanStr.padEnd(cleanStr.length + (4 - cleanStr.length % 4) % 4, '=');
      
      try {
        const binaryString = atob(paddedStr); // 安全解码
        const uint8Array = new Uint8Array(binaryString.length);
        for (let i = 0; i < binaryString.length; i++) {
          uint8Array[i] = binaryString.charCodeAt(i);
        }
        return uint8Array;
      } catch (e) {
        throw new Error(`Base64解码失败:${e.message}(原始字符串:${base64String.slice(0, 50)}...)`);
      }
    }
    

    4. 预防措施


  • 最佳实践1:使用js-base64等成熟库替代原生atob(自动处理编码校验与边缘情况),安装:npm install js-base64,用法:Base64.decode(str)

  • 最佳实践2:解码前用正则验证字符串合法性:/^[A-Za-z0-9+/]+={0,2}$/.test(str) && str.length % 4 === 0
  • ---
    :若字符串来自外部(如API/用户输入),需先确认源数据的Base64有效性。