Windows下,文本文件的行尾有CR和LF两个字符。这两个字符的Ascii编码分别是0x0D和0x0A,也就是十进制下的13和10.
早些年的时候,Windows下创建的文件,在Linux下用Emacs打开,可以看到每行的行尾都有一个
^M
记号。
因为Linux下的文本行尾只有一个字符,0x0A,也就是十进制的10。那么,那个十进制的13就显示为^M
了。
那么,为什么是^M
呢?为了ascii码表的整齐。0被规定显示为^@
,1对应^A
,2对应^B
,依次数下去,13就对应^M
。
现代的Emacs已经不显示这个^M
了,而把文件自动识别为DOS格式。想要再现出^M
来,还要费些周折。
但Windows下,c语言的putchar函数,有个特征可以再现:putchar(10),会输出两个字符,13 和 10。而getchar则会把这两个字符合并成一个。
那么,行尾究竟是哪一种好呢?这个问题还真不好说。如果说单纯的换行好的话,那么HTTP协议中分隔符却规定为0x0D,0x0A。Linux下用一个字符表示换行,很多编程方式都得到了简化,以至于处理二进制文件的方法和处理文本文件的方法基本相同。
使用 0x0D 0x0A 两个字符是尊重传统的方法,因为最早打印机打字的时候,回车表示倒回行首,换行表示进入下一行,这是两个动作。使用两个字符,遵循传统。
使用一个字符是创新的方法,简化设计。Mac系统据说在这个问题的选择上经历过变化,但一直只用一个字符。由于手头没有Mac电脑,不能实地观察了。
尊重传统和创新,一样都是极好的。
网友评论