You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fs.readFileSync返回的字符串调用includes()方法结果为false如何解决?

问题复现

执行代码let data = fs.readFileSync(pathToCsv, "utf8");后,console.log打印data输出如下:

clan,mem1,mem2,mem3,mem4,language,managerID,serverJoinedDate
pm,
pm

执行data.toString().includes("pm")返回false,尝试分割字符串、正则匹配都没有生效。

完整代码
const filter = (m) => m.author.bot === false;
await ogMessage.author.dmChannel
  .awaitMessages(filter, {
    max: 1,
    time: 60000,
  })
  .then((collected) => {
    if (clans[parseInt(collected.toJSON()[0].content) - 1]) {
      let clan = clans[parseInt(collected.toJSON()[0].content) - 1];
      let data = fs.readFileSync(pathToCsv, "utf8");
      console.log(typeof clan);
      // let reg = new RegExp(clan, "g");
      // let count = (data.match(reg) || []).length;
      if (data.split(",").includes(clan)) {
        ogMessage.author.send(
          "People from this clan are already registered!\nPlease contact the hosts for help!"
        );
        return;
      } else {
        teamCheck = true;
      }
    } else {
      ogMessage.author.send("Invalid Clan! Please try again!");
      return;
    }
  })
  .catch((collected) => {
    try {
      console.log("Error" + collected);
    } catch (e) {
      console.log(e);
    }
  });
if (teamCheck === false) {
  return;
}
补充说明

开发场景为Discord机器人开发。

故障原因
  1. CSV读取到的内容自带换行符,按逗号分割后得到的pm相关项实际携带了\n等换行控制符,和你要匹配的纯pm字符串不完全相等,导致includes匹配失败
  2. 可能存在UTF-8 BOM头、零宽空格等肉眼不可见的特殊字符,影响匹配结果
  3. 若clan变量不是字符串类型,严格相等匹配也会返回失败
修复方案
  1. 先对读取到的CSV内容和匹配目标做标准化清理,移除所有不可见控制字符和多余空白
  2. 分割后遍历匹配时单独对每一项做清理,避免换行符、空格影响匹配结果
    修改后的参考代码如下:
let clan = clans[parseInt(collected.toJSON()[0].content) - 1].toString().trim();
let data = fs.readFileSync(pathToCsv, "utf8");
// 移除所有不可见控制字符、BOM头
const cleanedData = data.replace(/[\u0000-\u001F\u007F-\u009F\uFEFF]/g, '');
// 分割后逐个清理匹配
const clanExists = cleanedData.split(',').some(item => item.trim() === clan);
if (clanExists) {
  ogMessage.author.send(
    "People from this clan are already registered!\nPlease contact the hosts for help!"
  );
  return;
} else {
  teamCheck = true;
}

如果清理后还是匹配失败,可以打印字符串的十六进制编码确认实际内容:

console.log(Buffer.from(data).toString('hex'))

正常pm对应的十六进制编码为706d,如果输出不符,说明文件编码读取错误,需要确认CSV文件的实际编码后指定对应编码读取即可。

内容的提问来源于stack exchange,提问作者Rijak Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:45:03