Nodejs 文件名中有乱码, FS 无法做任何操作, 如何破?

Nodejs 文件名中有乱码, FS 无法做任何操作, 如何破?

文件名中有乱码,估计是某些不被支持的 unicode 字符.windows 下看是个小方框, chrome 浏览器里看是个菱形问号… 一直报错"No such file or directory"!

不单是一个文件, 太多二次元妹子都喜欢用表情字符,所以非常多的文件都有这问题.

nodejs 应该如何处理呢??

系统:windows10 x64 nodejs: v7.7.3

2 回复

要是在 Linux 下改改 lang 就行了……
Windows 下的话估计在语言设置里可以改,高级里面如果你能交出贰刺螈妹子的话,我给你远程解决(雾………


遇到 Node.js 中文件名包含乱码,导致 fs 模块无法进行操作的问题时,通常是因为文件系统的编码与 Node.js 默认使用的编码(通常是 UTF-8)不匹配。以下是一些可能的解决方案:

  1. 确保文件系统编码: 确认你的文件系统(如 NTFS, ext4 等)使用的编码,并确保 Node.js 使用相同的编码来读取文件名。例如,在 Windows 上,文件名通常使用 GBK 或 GB2312 编码。

  2. 使用 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 操作
                }
            });
        });
    });
    
  3. 修改系统或 Node.js 配置: 在某些情况下,修改系统或 Node.js 的默认编码设置可能有助于解决问题,但这通常不推荐,因为它可能影响系统的其他部分。

希望这些方法能帮助你解决文件名乱码问题。

回到顶部