极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 换行符 LF(\n) 与 CRLF(\r\n)

最近遇到了很多 \n\r\n 的问题,虽然一直知道他们都是换行符,但也没有细究,今天顺手查了下。

首先,要了解 \n\r\n 的区别,在 Difference between \n and \r? (opens new window) 中有这样的示意:

\r = CR (Carriage Return) → Used as a new line character in Mac OS before X \n = LF (Line Feed) → Used as a new line character in Unix/Mac OS X \r\n = CR + LF → Used as a new line character in Windows

简单而言,现在除了 Windows\r\n 作为换行符,其他系统都是把 \n 作为了换行符。那我们有没有一种方法可以 把文件中的不可打印字符显示出来,来确认文件中是以什么换行的

# 试验

首先,先造一个包含两种换行符号的文件 newline.txt

$ echo -e 'LF\nCRLF\r\nEND' > newline.txt
$ cat newline.txt
LF
CRLF
END

使用 cat,它们都会按照换行符进行处理。而在浏览器中也会把它们当做换行符处理

> const o = 'LF\nCRLF\r\nEND'
< "LF
CRLF
END"

# 如何判断文件中的换行符

# vim

vim 中会发现其中蹊跷,:set list

$ vim newline.txt
LF$
CRLF^M$
END$

# cat

cat -e 代表显示不可打印字符与换行符。

$ cat -e newline.txt
LF$
CRLF^M$
END$

# 终极办法:strace

既然 cat 会把文件内容打印到终端, 那我们直接查看关于到标准输出 (FD 为1) 的系统调用 write 就能从最根源上解决问题。

$ strace -e write cat newline.txt
write(1, "LF\nCRLF\r\nEND\n", 13LF
CRLF
END
)       = 13
+++ exited with 0 +++

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 3/13/2021, 4:16:14 AM