Nodejs 文件名中有乱码, FS 无法做任何操作, 如何破?
Nodejs 文件名中有乱码, FS 无法做任何操作, 如何破?
文件名中有乱码,估计是某些不被支持的 unicode 字符.windows 下看是个小方框, chrome 浏览器里看是个菱形问号… 一直报错"No such file or directory"!
不单是一个文件, 太多二次元妹子都喜欢用表情字符,所以非常多的文件都有这问题.
nodejs 应该如何处理呢??
系统:windows10 x64 nodejs: v7.7.3
要是在 Linux 下改改 lang 就行了……
Windows 下的话估计在语言设置里可以改,高级里面如果你能交出贰刺螈妹子的话,我给你远程解决(雾………
遇到 Node.js 中文件名包含乱码,导致 fs
模块无法进行操作的问题时,通常是因为文件系统的编码与 Node.js 默认使用的编码(通常是 UTF-8)不匹配。以下是一些可能的解决方案:
-
确保文件系统编码: 确认你的文件系统(如 NTFS, ext4 等)使用的编码,并确保 Node.js 使用相同的编码来读取文件名。例如,在 Windows 上,文件名通常使用 GBK 或 GB2312 编码。
-
使用
iconv-lite
转换编码: 你可以使用iconv-lite
库来转换文件名编码。以下是一个示例代码,展示如何将文件名从 GBK 转换为 UTF-8:const fs = require('fs'); const iconv = require('iconv-lite'); const path = require('path'); const dirPath = './your_directory'; // 替换为你的目录路径 fs.readdir(dirPath, (err, files) => { if (err) throw err; files.forEach(file => { const filePath = path.join(dirPath, file); fs.stat(filePath, (err, stats) => { if (stats.isFile()) { let buffer = Buffer.from(file, 'gbk'); // 假设文件名为 GBK 编码 let decodedFile = iconv.decode(buffer, 'utf8'); console.log(decodedFile); // 输出解码后的文件名 // 你可以在这里对 decodedFile 进行 fs 操作 } }); }); });
-
修改系统或 Node.js 配置: 在某些情况下,修改系统或 Node.js 的默认编码设置可能有助于解决问题,但这通常不推荐,因为它可能影响系统的其他部分。
希望这些方法能帮助你解决文件名乱码问题。