如何处理nodejs中的特殊字符fs readdir函数

问题描述:

我正在使用fs.readdir()函数读取nodejs中的目录。您为它提供一个包含路径的字符串,并以字符串格式返回包含该目录路径内所有文件的数组。它不适合我的特殊字符(如ï)。如何处理nodejs中的特殊字符fs readdir函数

我遇到了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

可能的[复制如何检查Unicode字符串的平等在Javascript?](http://*.com/questions/7097867/how-do-i-check-equality-of-unicode-strings-in-javascript) – thejh 2013-02-24 21:07:43

你的性格似乎是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的引擎不会在你的代码解释正确I字符。

如果(2)起作用,它可能意味着文件系统向节点引擎以分解的Unicode格式(我后面跟着一个变音符¨)给出了ï字符。 CF @thejh回答

在此(2)的情况下,使用unorm库可在NPM比较之前标准化字符串(或原始UnicodeNormalizer

+0

不幸的是,这也不起作用(日志为false),崇高文本被配置为使用UTF8的新文件,但我认为只适用于内容而不是文件名? – askmike 2013-02-24 20:59:02

+0

你能输出encodeURIComponent(文件[0])和encodeURIComponent('maïs.md')的值吗?这可能暗示@thejh是否使用console.log指出你正确的方向(组成Unicode字符) – 2013-02-24 21:07:08

+0

我为文件[0], 'ma%C3获得'mai%CC%88s.md' %AFs.md'从文字复制的一个。看起来像什么时候到了某个地方! – askmike 2013-02-24 21:19:14

https://apple.stackexchange.com/a/10484/23863看起来很相关 - 这可能是因为在utf8中有不同的表达方式。

+0

这看起来非常棘手。我想实现的目标:将目录中的文件名与其他地方存储的文件名匹配。我想我需要找出如何改变不同的组合状态。 – askmike 2013-02-24 20:44:06