Node 不同系统的换行符怎么处理?
发布于 7 年前 作者 bighuang624 10817 次浏览 来自 问答

各位大佬,小弟学 Node 没有多久。受到写有道命令行工具的哥们的启发,自己写了一个小工具 yuki,能够将项目内文件结构自动映射并生成为 README.md,可以用来写放在 git 上的学习笔记之类的。现在有一个问题,就是在 Windows 底下的换行好像有些问题。我之前的处理方法是

const linebreak = (process.platform === 'win32') ? '\n\r' : '\n';

然后后面都用这个 linebreak 来表示要换行的地方。但是在室友的 Windows 电脑上测试时结果如下图: B25CCD6B1C2B912F48F18327E8258D44.png 换行情况十分诡异。想问一下,我这种处理方式是哪里出了问题?

10 回复

@atian25 好的,谢谢。我还是对 API 不太熟,要学习一个。

@atian25

有一点要注意,这个API只是知道运行环境用的哪个EOL

也就是说,假设你的文本是在win下写的,然后linux或mac下读的话,这个API并不能解决问题

因为3种系统有3种不同的EOL,可以考虑用正则xxx.split(/[\r\n]{1,2}/)

@CoderIvan 呃,您的意思我懂了,但是具体实现不包括分行的读取,只是要在 md 文件里写分行。所以我不是很理解这里提到正则xxx.split(/[\r\n]{1,2}/)具体该怎么用?

@bighuang624

这个正则是匹配出3种换行符\r, \n, \r\n,那你只要读到这3个的其中之一,就可以在md文件里写分行了

或者说不转换,你直接搬过去md那边,好像也没什么不对吧

md格式不知道有没要求说只能用哪种换行符

我从来只用 LF 换行,不管是什么系统

@CoderIvan@bighuang624 正则表达式/[\r\n]{1,2}/有bug , '\n\r'在 windows 里会被判断为换行, 而且\r 是 OS X 之前的 系统才有, 建议 /\r?\n/

@ianchn

哦,确实是忽略了这个Bug

我在实际实用中,这场景比较少,所以一直没发现

但我之前就是用的你写的这个,直至遇到Mac系统\r。。。

@CoderIvan 你确定吗? 用 \r 换行的是 1984 - 2001 年的 Classic Mac OS,你怎么遇到的?

@ianchn

因为之前是客户用的MAC电脑写的CSV文件,我把文件拿过来读的时候发现的

看你这么一说,我现在都不确定了,我得找个MAC电脑确认下

回到顶部