nodeJS编码问题

时间:2016-04-27 09:31:44

标签: node.js encoding

所以我遇到了一个我无法解决的问题。

这是我的代码:

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()
      };
    }
  }
};

问题在于名为“Posteàsouder”的存储库。如果我是console.log(list [i]),我会获得“Poste a` souder”。 如何解决此编码问题?

1 个答案:

答案 0 :(得分:1)

您应该为readdir()指定 encoding 选项:

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

请注意' utf8'编码是默认编码,因此您可能会获得不同的编码...

另请参阅docs

第二个注意:SO代码片段中的服务器端(node.js)代码不能正常工作' ...: - )