node讀取本地文件
let title = fs.readFileSync('./server/assets/title.txt', 'utf-8');
由于Node環(huán)境當中不支持GBK編碼荷并,此時讀到的文件合砂,英文可讀取,但中文亂碼
node.js當中的Buffer對象支持的編碼格式的種類(支持的格式:ascii璧坟、utf8既穆、utf16le、ucs2雀鹃、base64幻工、binary、hex)有限黎茎,不支持GBK的編碼形式囊颅。
解決辦法
iconv-lite用于在node當中處理在各種操作系統(tǒng)出現(xiàn)的各種奇特編碼,該模塊不提供讀寫文件的操作傅瞻,只提供文件編碼轉換的功能踢代。
npm install iconv-lite
const fs = require('fs');
const iconv = require('iconv-lite');
let title = fs.readFileSync('./server/assets/title.txt', {encoding:'binary'});
let restitle = iconv.decode(title, 'gbk');
restitle即為txt文檔中的中文
此時會出現(xiàn)一個警告
Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding
上面這個github中給出了詳細解釋,大概意思是說
在使用iconv.decode功能進行解碼之前嗅骄,原始資源(無意間)已經(jīng)body += chunk通過javascript類型轉換進行了解碼胳挎。
雙重解碼不僅會導致錯誤的結果,而且?guī)缀醪豢赡芑謴驮甲止?jié)溺森,因為utf8轉換是有損的慕爬,因此即使這樣做也iconv.decode(new Buffer(body, 'utf8'), 'win1252')
無濟于事。
不是很明白屏积,但有個忽略警告的方法
iconv.skipDecodeWarning = true;
使用前說明一下忽略警告医窿,就不會報錯