0

如何读取包含非 utf-8 字符的文件名的目录(例如 cp1251)?

fs.readdir("./dir1", function(err, files){
    console.log(files[0], new Buffer(files[0]));

});

响应:'忘记 (������).mp3',缓冲区 <46 6f 72 67 65 74 20 28 ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd 29 2e 6d 70 33>

upd:文件是从 proftpd 以 cp1251 编码名称上传的

# ls dir1
Forget (������).mp3

更新2:

ls dir1 | iconv -f cp1251 -t utf8
Forget (гитара).mp3
4

1 回答 1

0

显然,通过 FTP 上传的字符已经出错了……尝试手动重命名文件,然后再次重新运行您的 Node.js 应用程序。这一次,它应该工作:-)

您可以看到缓冲区中的文件名已损坏:

46 6f 72 67 65 74 20 28 ef bf bd ef bf bd ef bf bd
ef bf bd ef bf bd ef bf bd 29 2e 6d 70 33

该术语ef bf bd重复了六次,与无效字符的六次出现完美匹配,很明显它不是原始字符串гитара

于 2013-07-02T14:38:35.040 回答