错误信息: Failed to construct 'Headers': String contains non ISO-8859-1 code point. ...
🚨 错误信息
错误名称: AI_ProviderSpecificError
错误信息: Failed to construct 'Headers': String contains non ISO-8859-1 code point.
堆栈信息: AI_ProviderSpecificError: Failed to construct 'Headers': String contains non ISO-8859-1 code point.
at AiSdkToChunkAdapter.convertAndEmitChunk (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:56329:64)
at AiSdkToChunkAdapter.readFullStream (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:56143:10)
at async AiSdkToChunkAdapter.processStream (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:56112:31)
at async ModernAiProvider.modernCompletions (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:274747:22)
at async ModernAiProvider._completionsOrImageGeneration (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:274668:10)
at async ModernAiProvider.completions (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:274651:17)
at async fetchChatCompletion (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:281140:2)
at async transformMessagesAndFetch (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:281077:3)
at async fetchAndProcessAssistantResponseImpl (file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:61040:3)
at async file:///C:/Users/Administrator/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-CyrUNmAL.js:61132:6
错误原因: {
"message": "Failed to construct 'Headers': String contains non ISO-8859-1 code point."
}
🤖 AI解决方案
#代码报错分析报告错误翻译
错误发生在
调用链显示这是在处理AI服务响应流时发生的
很可能是AI返回的数据或自定义请求头中包含了非ASCII字符
ISO-8859-1(Latin-1)仅支持西欧语言字符,不支持中文、日文、韩文等
最佳实践:在所有外部数据进入Headers API之前进行编码验证
实现建议:
``
对于必须传递的非ASCII数据,使用URL编码或Base64编码
在项目文档中明确Header字段的编码要求
原文:Failed to construct 'Headers': String contains non ISO-8859-1 code point.
译文:构建'Headers'失败:字符串包含非ISO-8859-1编码的字符。
##
根本原因:在创建HTTP请求头(Headers)时,传入的字符串包含了ISO-8859-1编码范围之外的字符(如中文、表情符号、特殊Unicode字符等)。
具体位置:
AiSdkToChunkAdapter.convertAndEmitChunk 方法中技术背景:
Headers API在JavaScript中默认只接受ISO-8859-1编码的字符方案1:清理请求头中的非ASCII字符
javascript
// 在创建Headers之前,清理字符串中的非ASCII字符
function sanitizeHeaderValue(value) {
// 方法1:移除所有非ASCII字符
return value.replace(/[^\x00-\x7F]/g, '');
// 方法2:用空字符串替换非ASCII字符
// return value.replace(/[^\u0000-\u007F]/g, '');
// 方法3:编码特殊字符(如果必须保留)
// return encodeURIComponent(value);
}// 使用示例
const rawValue = "包含中文的Header值";
const sanitizedValue = sanitizeHeaderValue(rawValue);
const headers = new Headers({
'Content-Type': 'application/json',
'Custom-Header': sanitizedValue
});
方案2:使用Base64编码
javascript
// 如果必须传递非ASCII内容,使用Base64编码
function encodeHeaderValue(value) {
return btoa(unescape(encodeURIComponent(value)));
}// 创建Headers时
const headers = new Headers({
'Content-Type': 'application/json',
'X-Encoded-Data': encodeHeaderValue("包含中文的数据")
});
方案3:检查AI响应数据
javascript
// 在处理AI响应时,检查并清理数据
async function processAIResponse(response) {
const data = await response.json();
// 清理所有字符串字段中的非ASCII字符
const sanitizedData = JSON.parse(JSON.stringify(data), (key, value) => {
if (typeof value === 'string') {
return value.replace(/[^\x00-\x7F]/g, '');
}
return value;
});
return sanitizedData;
}
##### 1.清理
``
javascript
// 创建安全的Headers工厂函数
function createSafeHeaders(headersObj) {
const safeHeaders = new Headers();
Object.entries(headersObj).forEach(([key, value]) => {
if (typeof value === 'string' && /[^\x00-\x7F]/.test(value)) {
console.warn(Header "${key}" contains non-ASCII characters, sanitizing...);
value = value.replace(/[^\x00-\x7F]/g, '');
}
safeHeaders.append(key, value);
});
return safeHeaders;
}
`###️ 开发工具推荐
编码检查工具:使用ESLint插件如 eslint-plugin-unicode 检测非ASCII字符
调试方法:
`javascript
// 调试时快速检查字符串编码
function checkStringEncoding(str) {
const hasNonASCII = /[^\x00-\x7F]/.test(str);
console.log(字符串包含非ASCII字符: ${hasNonASCII});
if (hasNonASCII) {
console.log('问题字符:', str.match(/[^\x00-\x7F]/g));
}
return hasNonASCII;
}
``3. 在HTTP Headers中始终使用ASCII字符集
---
总结:此错误是由于HTTP Headers中包含了中文等非ASCII字符导致的。通过清理或编码这些字符即可解决。在处理国际化应用时,特别注意Header字段的编码限制。