node.js中https.request返回数据为utf-8,但是需要转换成gbk的问题

81 阅读1分钟

1.本人有一些纯纯的SB行为

2,先看情况

image.png 在我使用https.request后,监听data事件,process.stdout.write(d)直接将数据写入,然后end结束返回。 我想要我的返回不是utf8的形式,我需要gbk的形式

3.这个时候,我想到一些办法

A.setHeader
  • ①设置res的Content-type加上gbk,但是,我通过res.constructor得到的返回类型是IncomingMessage,所以无法setHeader;
  • ②于是我阅读官方文档,觉得应该在req的end前,加上,setHeader
B.npm

③setHeader走不通,我就想使用一些npm官方的库的使用,来解决这个问题,于是,我看了很多,也安装了,但是我发现,最后输出的结果是通过end后展示的,难道我要得到end后的值吗?于是我console.log(req.end(),'fuck')发现,我不能这样得到返回的结果

C.JSON

最后发现,process.stdout.write(d)做的事,难道我不能自己去写入数据,然后做处理吗?比起去解析这个过程,然后改写这个内容,我自己去写入数据难道来的不是更快更方便吗?

D.终于完成编码格式转换
const arr = []
res.on('data',(chunk)=>{
    arr.push()
    //push进去的是chunk的一个个分散的字符
})
    //接下来需要拼接
res.on('end',()=>{
    //进行拼接
    const result = Buffer.concat(arr).toString()
    
    //完成字符转换
    JSON.parser(result)
})

小结

自己还是对response的事件不熟悉,导致,无法反应过来process.stdout.write(d)是在做什么。这个过程在写node.js静态服务器的时候,自己也手写过这个过程,但是因为不够熟悉,导致,浪费了很多时间找错误的方法。