用节点解码unicode编码的json

时间:2015-07-13 03:33:59

标签: node.js unicode encoding

我正在使用MailChimp API并返回错误响应,如下所示:

{ 
  statusCode: 400,
  data: '\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0003L��\t�0\fF�UJ�N�\u0006NQ�\r%`��\'\n"��Ћ���nb��f\u0012=�&9����i\u001a\'f�\u0015�]�~j\u0019*\u0014$��W��\u0013Reg��_T1\u0013-��\u0000\u0000\u0000��\u0003\u0000�;�oc\u0000\u0000\u0000' 
}

内容类型是JSON - 我假设这是unicode编码的。 Node / JS中是否有内置函数来解码?我只是找到了自制的实现 - 到目前为止还没有任何工作。

根据评论JSON.parse(err.data)返回垃圾。是的,这是一个对象,而不是一个字符串。想法?

编辑。我已经尝试解码到utf8,gunzipping等,但仍然没有去。

2 个答案:

答案 0 :(得分:0)

看起来像JSON但不是 - 键未按要求引用。如上所述,这是一个mailchimp错误消息。

这可能有助于解决问题:https://groups.google.com/forum/#!msg/mailchimp-api-discuss/S0JrzoEWY_0/94gTLsBjvtUJ - 或不是。

答案 1 :(得分:0)

解决方案是在请求配置中包含gzip: true,例如:

const data = await http({
  url: 'https://login.mailchimp.com/oauth2/token',
  method: 'POST',
  gzip: true,
  form: {
    grant_type: 'authorization_code',
    client_id: clientId,
    client_secret: clientSecret,
    redirect_uri: redirectUri,
    code,
  },
});

这将正确解码返回到人类可读错误消息中的乱码。