kagura_kana 2020-04-06 22:09 采纳率: 0%
浏览 197

node+iconv-lite无法转换qq昵称api的用户名信息字符编码.[已解决]

  • - api: https://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=qq号

返回数据:

图片说明

网页显示:

图片说明

网页显示的内容是chorme浏览器自动转成GBK的.

使用node+http-proxy-middleware+iconv-lite进行跨域调用和转码:

代码:

router.get('/qqinfo', createProxyMiddleware({
  changeOrigin: true,
  // selfHandleResponse: true,
  target: 'https://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg',
  pathRewrite: { '^/api/out/qqinfo': '' },
  onProxyReq(proxyReq, req, res) {
    proxyReq.setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');
    proxyReq.setHeader('Cache-Control', 'no-cache');
    proxyReq.setHeader('Accept-Language', 'zh-CN,zh;q=0.8;en-US;q=0.9');
    proxyReq.setHeader('sec-fetch-site', 'none');
    proxyReq.setHeader('referer', '');
    proxyReq.setHeader('sec-fetch-mode', 'navigate');
    proxyReq.setHeader('sec-fetch-user', '?1');
    proxyReq.setHeader('Host', 'r.qzone.qq.com');
    proxyReq.setHeader('sec-fetch-dest', 'document');
    proxyReq.setHeader('Upgrade-Insecure-Requests', '1');
  },
  onProxyRes(proxyRes, req, res) {
    let arr = [];
    proxyRes.on('data', (chunk) => {
      arr.push(chunk)
    })
    proxyRes.on('end', () => {
      arr = Buffer.concat(arr)
      console.log(arr) //buffer
            let str1 = iconv.decode(arr, 'utf-8')//乱码
      let str2 = iconv.decode(arr, 'GBK') //通过node转换gbk
            console.log(str1) //乱码
            console.log(str2) //乱码
          res.end(str)//乱码,注释直接返回代理请求结果正常显示.
    })
  },
}))

图片说明

不经过node转码直接返回(浏览器GBK编码):

图片说明

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 00:12
    关注

    参考GPT和自己的思路:

    根据你的描述,问题出现在调用 API 返回的数据中,因为其中包含了一些非 ASCII 字符,需要进行编码转换才能正常显示。你使用了 Node.js 和 iconv-lite 组件来实现编码转换,但是遇到了编码转换失败的问题。具体原因可能是使用了错误的编码格式或者在转换过程中出现了一些异常情况。建议你尝试使用其他编码格式进行转换,或者检查代码中是否存在错误,例如数据流处理不完整等问题,以找到编码转换失败的原因。

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站