2

我正在使用该fs.readdir()函数读取 nodejs 中的目录。你给它一个包含路径的字符串,它返回一个数组,其中包含该目录路径内的所有文件,格式为字符串。它不适用于特殊字符(如ï)。

我遇到了这个类似的问题,但是我在 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
});

上述测试适用于没有特殊字符的文件。我怎样才能正确比较这个?

4

2 回答 2

0

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

于 2013-02-24T20:35:55.810 回答
0

你的性格好像就是这个。你应该尝试

(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

于 2013-02-24T20:51:10.983 回答