1

我正在从一个 api 获取数据,并得到如下字符串:

[
  {
    "reason": "Invalid address", 
    "email": "j\u00c3\u00a9r\u00c3\u00b4mel\u00c3\u00a4ufer@com"
  },
  {
    "reason": "Invalid address", 
    "email": "dsfdsf"
  },
]

现在我只做 JSON.parse(data),然后返回。但是,在前端,当渲染页面时,我得到了一些奇怪的字符,例如:

email: "jérômeläufer@com"

我想要的是逃避 \u00c3\u00a9r... 这些东西,只是为了在页面上显示

email: "j\u00c3\u00a9r\u00c3\u00b4mel\u00c3\u00a4ufer@com"

或者,对这些东西进行编码,因为我将使用这些电子邮件作为参数来做一些事情,但是由于这些奇怪的字符,我无法获得相同的电子邮件。

这有可能吗?

解决方案

我已经解决了这个问题,实际上我是从 sendgrid 的 api 获取无效的 useremail 列表,api 是

GET https://api.sendgrid.com/api/invalidemails.get.json?api_user=user&api_key=key

并得到如下返回数据:

[
  {
    "reason": "Invalid address", 
    "email": "j\u00c3\u00a9r\u00c3\u00b4mel\u00c3\u00a4ufer@com"
  },
  {
    "reason": "Invalid address", 
    "email": "dsfdsf"
  },
]

所以首先我使用这个字符串 "j\u00c3\u00a9r\u00c3\u00b4mel\u00c3\u00a4ufer@com"

decodeURIComponent(escape(string))

这将在网页上正确显示,然后当我想删除这封电子邮件并让这封电子邮件作为参数从 sendgrid 中调用 remove email api 时,例如:

POST(which is weriod,but it's official delete method) https://api.sendgrid.com/api/invalidemails.delete.json

身体是:

body:{
   user: ..,
   key: ...,
   email:unescape(encodeURIComponent(email))
}

然后它起作用了,所以有人知道为什么吗?

4

2 回答 2

1

JSON.parse是正确的。问题在于内容本身,而不是你如何处理它。

确实,您需要与负责上游 API 的人交谈,并让他们修复数据中的错误。(虽然,如果数据是您首先发送给他们的东西,那么在另一端仍然有可能是您的错。)

作为一种临时措施,您可以在解析 JSON 后撤消修改。如果修改是 UTF-8 字节被误解为 ISO-8859-1,那么有一个成语可用于进行匹配的编码/解码循环:

>>> decodeURIComponent(escape('jérômeläufer@com'));
'jérômeläufer@com'

(但是,它实际上可能是 UTF-8 字节被误解为 Windows 代码页 1252,在这种情况下,没有同样简单的修复可用,并且上面会抛出一个 execption。我不能从上面的格式错误的字符串中编码它。 )

这也不jérômeläufer@com是一个正确的电子邮件地址:-)

于 2014-11-06T18:27:58.643 回答
1

看起来数据被正确解析,问题出在源数据本身。

尝试通过在线转换器运行一些字符代码(“\u00c3”或仅“0xC3”作为十六进制值),您将获得 JSON.parse 返回的字符

于 2014-11-06T16:25:07.737 回答