2016-04-27 146 views
1

所以我面臨的情況,我不能解決。問題nodeJS編碼

這裏是我的代碼:

var fs = require('fs'); 
 
var path = require('path'); 
 

 
module.exports = { 
 

 
    showTree: function (req, res) { 
 
    var _p; 
 
    if (req.query.entity) { 
 
     _p = path.resolve(__dirname, '../../uploads/Segmentation', req.query.entity); 
 
    } else { 
 
     _p = path.resolve(__dirname, '../../uploads/Segmentation', 'Default'); 
 
    } 
 
    if (req.query.id == 1) { 
 
     processReq(_p, res); 
 
    } else { 
 
     if (req.query.id) { 
 
     _p = req.query.id; 
 
     processReq(_p, res); 
 
     } else { 
 
     res.json(['No valid data found']); 
 
     } 
 
    } 
 

 
    function processReq(_p, res) { 
 
     var resp = []; 
 
     var encoding = 'utf8'; 
 
     fs.readdir(_p,encoding, function(err, list) { 
 
     if (typeof list !== 'undefined'){ 
 
      for (var i = list.length - 1; i >= 0; i--) { 
 
      resp.push(processNode(_p, list[i])); 
 
      } 
 
      res.json(resp); 
 
     } else { 
 
      res.json(null); 
 
     } 
 
     }); 
 
    } 
 

 
    function processNode(_p, f) { 
 
     var s = fs.statSync(path.join(_p, f)); 
 
     return { 
 
     "id": path.join(_p, f), 
 
     "text": f, 
 
     "icon" : s.isDirectory() ? 'jstree-custom-folder' : 'jstree-custom-file', 
 
     "state": { 
 
      "opened": false, 
 
      "disabled": false, 
 
      "selected": false 
 
     }, 
 
     "li_attr": { 
 
      "base": path.join(_p, f), 
 
      "isLeaf": !s.isDirectory() 
 
     }, 
 
     "children": s.isDirectory() 
 
     }; 
 
    } 
 
    } 
 
};

問題是與一個叫庫: 「郵政àSOUDER」。如果我console.log(列表[我]),我獲得「郵報」。 如何解決此編碼問題?

回答

1

應指定編碼選項readdir()

var encoding = 'utf8'; // or the encoding you expect... 
fs.readdir(_p, {encoding: encoding}, function(err, list) { 
    ... 
}); 

請注意,「utf-8」編碼是默認的,所以你可能會得到不同的編碼...

參見docs

秒注意:服務器端(node.js中)代碼在這裏對SO代碼段不能正常工作 '原樣' ... :-)

+0

感謝。奇怪的是,當我在第二個參數中添加編碼時,我得到了以下錯誤:TypeError:回調必須是函數 – musecz

+0

是的,抱歉,我的錯誤!第二個參數必須是具有'encoding'屬性的對象...答案已經更新... – MarcoS

+0

奇怪的是我仍然得到相同的錯誤 – musecz