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

时间:2013-02-24 20:32:31

标签: node.js encoding special-characters readdir

我正在使用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
});

上述测试适用于没有特殊字符的文件。如何正确比较?

2 个答案:

答案 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