使用 nodeFetch 在 JSON API 响应中正确显示特殊字符

Posted

技术标签:

【中文标题】使用 nodeFetch 在 JSON API 响应中正确显示特殊字符【英文标题】:Correctly display special characters in JSON API response using nodeFetch 【发布时间】:2019-11-04 08:06:43 【问题描述】:

我有一个通过 HTTP 与 RESTful API 通信的反应应用程序。 API 返回一个可能包含特殊字符的 JSON 响应正文。

示例响应可能如下所示:


    "name": "Property One",
    "description": "Res Thick Film 0805 49.9 Ohm 1% 0.25W(1/4W) ±100ppm/°C Pad SMD Automotive T/R",
    ...

有问题的特殊字符是(但不限于)±和°。

我使用nodeFetch 执行请求,如下所示:

nodeFetch(url,  method: 'GET', headers ).then(response => response.json());

如果我在使用 response.json() 反序列化对象后观察该对象,description 属性现在看起来像这样:

"Res Thick Film 0805 49.9 Ohm 1% 0.25W(1/4W) �100ppm/�C Pad SMD Automotive T/R"

如何阻止特殊字符被替换为 �?

【问题讨论】:

看起来像nodeFetchhandles utf-8 自动。您对 REST 服务器有任何控制权吗?您可以将其设置为以 utf-8 编码其响应吗? 'Content-Type: text/html; charset=utf-8' @DSCH 我有访问权限。将Content-Type 更改为application/json; charset=UTF-8nodeFetch 正确反序列化了响应!回答问题,以便我奖励赏金! 你使用的是哪个版本的nodefetch? 【参考方案1】:

你也可以看看这个问题,可能 cskau-g repost 应该对你有帮助 https://github.com/dart-lang/http/issues/175

我认为问题在于编码为 utf-8 并且内容类型必须设置为 text/html

【讨论】:

【参考方案2】:

您可能应该将标题:Content-Type 设置为 text/html; charset=utf8nodeFetch 支持 UTF-8 开箱即用

【讨论】:

如果nodeFetch 的版本是2.X,那么根本不需要在服务器端进行更改。不确定 OP 使用的是什么版本

以上是关于使用 nodeFetch 在 JSON API 响应中正确显示特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

使用表单的响应将数据集属性保存在 JSON 文件中 (Vue.js)

无法将 JSON 响应分配给预先声明的数组

关键漏洞拉响警报!停止使用JSON加密!

为 API 调用 Xml2Json 制作 Json 模型

使用 fetch 在节点中进行异步 api 调用的最佳实践?

Rails 5.2 API - 在JSON中返回枚举值