1. 程式人生 > >Node.js讀寫中文內容檔案操作

Node.js讀寫中文內容檔案操作

由於Node.js僅支援如下編碼:utf8, ucs2, ascii, binary, base64, hex,並不支援中文GBK或GB2312之類的編碼,因此如果要讀寫GBK或GB2312格式的檔案的中文內容,必須要用額外的模組:iconv-lite

  • 安裝模組:npm install iconv-lite
  • 演示程式碼,把下面的程式碼複製到一個檔案中,假設是ch.js(注意:js檔案必須儲存為utf8編碼格式):

// 載入File System讀寫模組
var fs = require('fs');
// 載入編碼轉換模組
var iconv = require
('iconv-lite'); var file = "c:\\a.txt"; writeFile(file); readFile(file); function writeFile(file){ // 測試用的中文 var str = "\r\n我是一個人Hello myself!"; // 把中文轉換成位元組陣列 var arr = iconv.encode(str, 'gbk'); console.log(arr); // appendFile,如果檔案不存在,會自動建立新檔案 // 如果用writeFile,那麼會刪除舊檔案,直接寫新檔案
fs.appendFile(file, arr, function(err){ if(err) console.log("fail " + err); else console.log("寫入檔案ok"); }); } function readFile(file){ fs.readFile(file, function(err, data){ if(err) console.log("讀取檔案fail " + err); else
{ // 讀取成功時 // 輸出位元組陣列 console.log(data); // 把陣列轉換為gbk中文 var str = iconv.decode(data, 'gbk'); console.log(str); } }); }
  • 用node.exe執行這個js檔案,結果如下
C:\>node ch.js
<Buffer 0d 0a ce d2 ca c7 d2 bb b8 f6 c8 cb 48 65 6c 6c 6f 20 6d 79 73 65 6c 66 21>
寫入檔案ok
<Buffer 0d 0a ce d2 ca c7 d2 bb b8 f6 c8 cb 48 65 6c 6c 6f 20 6d 79 73 65 6c 66 21>

我是一個人Hello myself!

注①:iconv-lite傳送門
注②:我在測試讀寫檔案時,始終無法把中文寫入檔案,一直亂碼,讀取正常,後來同事幫我發現:js檔案的編碼格式是ansi,nodejs的程式碼檔案必須是utf8格式
注③:如果程式操作的檔案,都是以UTF8編碼格式儲存的,那麼就不需要使用iconv模組,直接以utf8格式讀取檔案即可,如:


// 引數file,必須儲存為utf8格式,否則裡面的中文會亂碼
function readFile(file){
    // readFile的第2個引數表示讀取編碼格式,如果未傳遞這個引數,表示返回Buffer位元組陣列
    fs.readFile(file, "utf8", function(err, data){
        if(err)
            console.log("讀取檔案fail " + err);
        else{
            // 讀取成功時
            console.log(data);// 直接輸出中文字串了
        }
    });

結論:使用node.js開發時,無論是程式碼檔案,還是要讀寫的其它檔案,都建議使用UTF8編碼格式儲存,這樣可以無需額外的模組支援

轉自:https://blog.csdn.net/youbl/article/details/29812669
更多文章參考:https://segmentfault.com/a/1190000011351573