gpt4 book ai didi

javascript - 语法错误: Unexpected token in JSON at position 0

转载 作者:行者123 更新时间:2023-12-03 05:01:16 26 4
gpt4 key购买 nike

我在使用 Whatwg-fetch npm 从 javascript 节点模块访问 .Net WCF 提供的 REST 服务时遇到此问题。

请注意,上面的错误消息引用了一个看似空格的意外标记。

由于我无法弄清楚这是什么,所以我花了很多时间考虑其他可能的深奥问题,例如 CORS、身份验证、混合来自 fetch API++ 的 Promises。

最佳答案

原因是 WCF REST 服务通过此调用创建响应:

return WebOperationContext.Current.CreateTextResponse(
json,
"application/json; charset=utf-8",
Encoding.UTF8
);

事实证明,当 Microsoft 实现 Encoding.UTF8 编码时,他们选择在 json 字符串前面加上 UTF BOM 标记。结果是 JSON 左大括号前面有三个字符:0xEF0xBB0xBF。在 ISO-8859-1 或 CP1252 中查看时,它们看起来像这样 

在这种情况下,我确实应该相信错误消息,但就在我开始添加身份验证的前一天,我收到其他人的报告,说 REST 服务确实正常工作。然后我开始添加迄今为止缺少的测试 - 同时还添加身份验证。正是在这个阶段,我意识到所有测试都失败了。而且 - 回溯并没有真正帮助......

作为旁注:当代码在浏览器中运行时,它似乎对 BOM 标记更加宽容。然而,当在节点中运行测试时,它似乎更加挑剔......

解决方案是强制关闭编码的 BOM 标记,如下所示:

// Note, false to avoid BOM marker which breaks some clients not expecting BOM for utf-8
var utf8 = new UTF8Encoding(false);
return WebOperationContext.Current.CreateTextResponse(
json,
"application/json; charset=utf-8",
utf8
);

关于javascript - 语法错误: Unexpected token in JSON at position 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42218393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com