nodejs 中 stream.pipe()直接将文件输出到页面乱码

最近仿照anywhere写个anyentry目录读取器,发现使用stream.pipe()将文件输入到页面时,出现中文乱码

看哇

文件中文乱码
看到着实不爽,不解决咋能算

于是开始寻找问题根源

一、配置encoding

一开始就想到了是stream.pipe() 文件读取的时候没有设置编码

看官网的介绍是这样的
在这里插入图片描述
于是果断加上在这里插入图片描述
然鹅 测试然并卵

二、配置html的charset

再一细想应该是html没有设置 charset 的原因

跑去一看html
在这里插入图片描述
有配置呀! ???那奇了怪了

静下心来在想想,再次运行发现

在这里插入图片描述
这个为什么没有乱码?!

于是比对页面

这个是目录页面
在这里插入图片描述


这个是文件页面

在这里插入图片描述
发现head中根本就没有东西

再看一次代码,总算是明白了
在这里插入图片描述
这个是直接将其文件流返回给response的

在这里插入图片描述
而目录是使用了html模板进行渲染的,就是是一个乱码一个没乱的原因了

三、setHeader 增加charset

最后res.setHeader('Content-Type', contentType['text']+"; charset=utf-8"); 增加一个charset=utf-8 解决问题
在这里插入图片描述


好了问题解决,告一段落,其他废话不多说

效果测试可以 本地安装 npm i -g anyentry, anyentry -p 9999

源码地址可以访问 https://github.com/dengxiaoning/anyentry


原文地址:https://www.cnblogs.com/dengxiaoning/p/12871798.html