错误信息: Failed to execute 'atob' on 'Window': The string to be decoded is not corr...
错误信息
错误名称: 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. 预防措施
js-base64等成熟库替代原生atob(自动处理编码校验与边缘情况),安装:npm install js-base64,用法:Base64.decode(str)。 /^[A-Za-z0-9+/]+={0,2}$/.test(str) && str.length % 4 === 0。 ---
注:若字符串来自外部(如API/用户输入),需先确认源数据的Base64有效性。