为什么Windows中的换行符为2个字节?

tal*_*ees 2 windows byte newline

在Windows上换行是2个字节的原因是什么?是不是只有ASCII中的一个字节?

Joe*_*oey 10

从历史上看,换行符由两个字符组成:U + 000D回车(我在这里使用Unicode,因为这是我们现在使用的 - 当时它可能是ASCII或可能不是那样)和U + 000A新线.这两个是必要的,因为一个将进一步推进打印头一行,而另一个将它返回到下一行的开头.相比之下,在打字机上转动纸卷(电传打字机不是别的,实际上,只是连接到计算机)并向后移动托架,右侧的杠杆为您完成.

顺便说一下,大多数网络协议都保留了CR + LF序列,所以在某种程度上它是Unix,这就是奇怪的.当电话类型不再存在并被视频终端取代,后来由终端仿真器取代时,对于双字符序列不再有物理需求.此外,它还会在代码中检查换行符,因为您总是需要比较两个字节.因此决定(Multics和更高版本)Unix只保留一个可以简化许多事情的字符.后来指定C在文本模式下读取或写入流时在U + 000A和平台本机换行序列之间执行转换.

另一方面,Windows通过CP/M和DOS继承了CR + LF,没有任何理由可以更改默认值.对于微软来说,向后兼容性始终是一个强项,他们不可能在过去的某个时刻打破这一点(我会打算为一些非常愤怒的客户做出决定).

Mac OS(旧的)是另一个古怪的,只使用CR进行换行.