如何不编码unicode,javascript

How to do not encode unicode, javascript

本文关键字:javascript unicode 编码 何不      更新时间:2023-09-26

我从一个api中获取数据,并获得类似于的字符串

[
  {
    "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中获取无效的用户电子邮件列表,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''u00 b4mel''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))
}

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

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,在这种情况下,没有同样简单的修复程序,上面的代码会抛出exeception。我不知道它是来自上面格式错误的字符串的哪个编码。)

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

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

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