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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章