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"。