CRLF和LF以及对应的坑

CRLF和LF的区别

  • CR:回车
  • LF:换行

使用VSCode打开文件,右下角显示文件的换行方式:

  • CRLF即使用回车+换行表示换行
  • LF仅使用换行表示换行

相关的坑

使用不同的换行方式,可能导致各种稀奇古怪的问题,例如文件数据如下:

abcdefg
hijklmno
pqrstu
vwxyz

使用如下代码读取数据:

// 每读取2个字符然后跳过一个字符
for {
	data := make([]byte, 2)
	_, err := f.Read(data)
	if err != nil {
		break
	}
	f.Seek(1, 1)
	log.Println(string(data))
}
  • 对于CRLF换行方式的文件,输出结果是:
2022/01/13 20:11:25 ab
2022/01/13 20:11:25 de
2022/01/13 20:11:25 g
2022/01/13 20:11:25 hi
2022/01/13 20:11:25 kl
2022/01/13 20:11:25 no
2022/01/13 20:11:25
p
2022/01/13 20:11:25 rs
2022/01/13 20:11:25 u
2022/01/13 20:11:25 vw
2022/01/13 20:11:25 yz
  • 对于LF换行的文件而言,输出是:
2022/01/13 20:12:24 ab
2022/01/13 20:12:24 de
2022/01/13 20:12:24 g

2022/01/13 20:12:24 ij
2022/01/13 20:12:24 lm
2022/01/13 20:12:24 o

2022/01/13 20:12:24 qr
2022/01/13 20:12:24 tu
2022/01/13 20:12:24 vw
2022/01/13 20:12:24 yz

由上可以看出,

  • 对于使用CRLF换行的文件,每次换行由两个字符:CR(回车)、LF(换行)组成。例如:第三个输出结果是"g ",第四个输出是"hi"。即第三次读取"g"和"回车键",然后跳过换行键,第四次读取"hi"。
  • 对于使用LF换行的文件,从第三次结果可以看出,结果是"g" + "换行键",跳过后续的"h",第四次读取"ij"。
上一篇:使用Apache模块mod_deflate加快页面打开速度


下一篇:git add时提示:warning: LF will be replaced by CRLF in ......