Node.js读取文件拆分后数组元素末尾出现\r的问题求助
解决Node.js读取文件后数组元素末尾出现
\r的问题 这个问题我之前也碰到过,根源是Windows和Unix系统的换行符差异导致的:Windows系统的换行标记是\r\n,而你用split('\n')拆分文本时,只会移除\n,\r就会留在每一行的末尾(最后一行因为没有换行符,所以不会带\r)。这也是为什么你在多个Node.js版本中都能复现这个问题——它和Node版本无关,是文本格式的系统差异问题。
下面给你几种实用的解决方法:
方法1:用正则表达式兼容两种换行符
直接修改拆分逻辑,用正则匹配\r\n或\n,同时自动去掉\r:
const fs = require('fs'); let data = fs.readFileSync('data.txt', 'utf8' ); // 用 /\r?\n/ 匹配Windows(\r\n)和Unix(\n)换行符 let rawData = data => data.split(/\r?\n/); let objData = data => data.map(line => line.split('\t')); console.log(objData(rawData(data)));
方法2:对每行做trim处理
如果还想顺便清理每行首尾的空格等空白字符,可以在拆分前对每行调用trim():
const fs = require('fs'); let data = fs.readFileSync('data.txt', 'utf8' ); let rawData = data => data.split('\n'); // 先trim去掉首尾空白(包括\r),再拆分制表符 let objData = data => data.map(line => line.trim().split('\t')); console.log(objData(rawData(data)));
方法3:过滤空行(可选优化)
如果你的文件末尾可能存在空行,还可以在拆分后过滤掉空元素,避免出现空数组:
const fs = require('fs'); let data = fs.readFileSync('data.txt', 'utf8' ); let rawData = data => data.split(/\r?\n/).filter(line => line.trim()); let objData = data => data.map(line => line.split('\t')); console.log(objData(rawData(data)));
以上几种方法都能解决你遇到的\r残留问题,根据你的实际需求选择即可。
内容的提问来源于stack exchange,提问作者wokoro douye samuel
相关产品推荐
相关产品推荐

