2016-04-27 3 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() 
 
     }; 
 
    } 
 
    } 
 
};

Проблема с хранилищем под названием: "Poste à Souder". Если я console.log (список [i]), я получаю «Poste a` souder». Как решить эту проблему с кодировкой?

ответ

1

Вы должны указать кодирование вариант readdir():

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

Пожалуйста, обратите внимание, что «utf8» Кодировка по умолчанию, так что вы, вероятно, получить другую кодировку ...

Смотрите также docs.

Второе примечание: на стороне сервера (Node.js) код здесь на SO фрагмент кода не работает 'как есть' ... :-)

+0

Спасибо. Странно, когда я добавляю кодировку во втором параметре, я получил эту ошибку: TypeError: обратный вызов должен быть функцией – musecz

+0

Да, извините, моя ошибка! Второй параметр должен быть объектом с свойством 'encoding' ... Ответ уже обновлен ... – MarcoS

+0

Странно, что я все еще получил ту же ошибку – musecz

Смежные вопросы