2016-04-27 15 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(list [i])に "Poste a` souder"を取得した場合。 このエンコードの問題を解決するにはどうすればよいですか?

答えて

1

あなたはreaddir()エンコーディングオプションを指定する必要があります。

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

も参照してください...「UTF8」エンコーディングがデフォルトですので、あなたはおそらく別のエンコーディングを取得していることに注意してくださいdocs

セカンドノート:SOコードスニペットのここでのサーバ側(Node.jsの)コード:-) ... 'と、ある'

+0

おかげで動作しません。奇妙なことに、2番目のパラメータにエンコーディングを追加すると、このエラーがスローされます。TypeError:コールバックは関数でなければなりません。 – musecz

+0

はい、申し訳ありません、私の間違いです! 2番目のパラメータは 'encoding'プロパティを持つオブジェクトでなければなりません...既に更新された回答... – MarcoS

+0

奇妙なことに私はまだ同じエラーがあります – musecz

関連する問題