CNode

Node 不同系统的换行符怎么处理?

问答
Bbighuang624发布于9 年前最后回复9 年前10 回复11630 浏览0 收藏

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

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

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

查看回复

回复 (10)

A
atian25#1·9 年前
B
bighuang624#2·9 年前
引用 atian25直接用 os.EOL,https://nodejs.org/api/os.html os os eol \r\n 才对,你写反了。

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

C
CoderIvan#3·9 年前
引用 atian25直接用 os.EOL,https://nodejs.org/api/os.html os os eol \r\n 才对,你写反了。

@atian25

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

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

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

B
bighuang624#4·9 年前
引用 CoderIvan@atian25 有一点要注意,这个API只是知道运行环境用的哪个EOL 也就是说,假设你的文本是在win下写的,然后linux或mac下读的话,这个API并不能解决问题 因为3种系统有3种不...

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

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

@bighuang624

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

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

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

H
Hyurl#6·9 年前

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

I
ianchn#7·9 年前

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

C
CoderIvan#8·9 年前
引用 ianchn@CoderIvan,@bighuang624 正则表达式 有bug , 在 windows 里会被判断为换行, 而且 是 OS X 之前的 系统才有, 建议

@ianchn

哦,确实是忽略了这个Bug

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

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

C
CoderIvan#10·9 年前
引用 ianchn@CoderIvan 你确定吗? 用 \r 换行的是 1984 2001 年的 Classic Mac OS,你怎么遇到的?

@ianchn

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

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

参与回复
登录后即可参与回复。登录