我正在使用fs.readdir()
函数读取nodejs中的目录。您为它提供一个包含路径的字符串,它返回一个数组,其中包含该字符串格式的该目录路径中的所有文件。它对我来说不适用于特殊字符(例如ï
)。
我遇到this similar issue,但是我在OS X上。)
首先,我创建了一个名为encoding
的新目录,并创建了一个名为maïs.md
的文件(使用我的编辑器Sublime Text)。
fs.readdir('encoding', function(err, files) {
console.log(files); // [ 'maïs.md' ]
console.log(files[0]); // maïs.md
console.log(files[0] === 'maïs.md'); // false
console.log(files[0] == 'maïs.md'); // false
console.log(files[0].toString('utf8') === 'maïs.md'); // false
});
上述测试适用于没有特殊字符的文件。如何正确比较?
答案 0 :(得分:0)
https://apple.stackexchange.com/a/10484/23863看起来很相关 - 这可能是因为在utf8中有不同的表达方式。
答案 1 :(得分:0)
你的角色似乎是this one。你应该试试
(1) console.log(files[0] == 'ma\u00EF;s.md');
(2) console.log(files[0] == 'mai\u0308;s.md');
如果(1)有效,则可能意味着包含代码的文件未以utf-8格式保存,因此node.js引擎无法正确解释代码中的ï字符。
如果(2)有效,则可能意味着文件系统以节点分解的unicode形式向节点引擎提供ï字符(i后跟变音符号¨)。 cf @thejh回答
在这个(2)的情况下,使用npm上可用的unorm库来规范化字符串,然后再比较它们(或原始的UnicodeNormalizer)