所以我遇到了一个我无法解决的问题。
这是我的代码:
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”。 如何解决此编码问题?
答案 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)代码不能正常工作' ...: - )