2

関数を使用してnodejsのディレクトリを読んでいfs.readdir()ます。パスを含む文字列をフィードすると、そのディレクトリ パス内のすべてのファイルを文字列形式で含む配列が返されます。特殊文字( など)では機能しませんï

この同様の問題に遭遇しましたが、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 に答える