如何不编码unicode,javascript

问题描述 投票:1回答:2

我从一个api获取数据,并获得STRING:

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

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

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调用删除电子邮件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))
}

然后它工作,所以任何人都知道为什么?

javascript json unicode sendgrid koa
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是一个合适的电子邮件地址:-)


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.