3

换行符在 Windows 上为 2 个字节的原因是什么?\n 不只是 ASCII 中的一个字节吗?

4

1 回答 1

11

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

顺便说一句,大多数网络协议都保留了 CR+LF 序列,所以在某种程度上,这里的怪事是 Unix。当电传打字机不复存在并被视频终端和后来的终端仿真器所取代时,两个字符序列不再需要物理了。此外,它还使检查代码中的换行变得困难,因为您总是必须比较两个字节。因此,决定(Multics 和更高版本的)Unix 只保留一个字符,这将简化许多事情。C 后来被指定在以文本模式读取或写入流时执行 U+000A 和平台原生换行序列之间的转换。

另一方面,Windows 通过 CP/M 和 DOS 继承了 CR+LF,并且没有任何有用的理由让他们更改该默认值。向后兼容性一直是微软的强项,他们不能在过去的某个时候打破这一点(我敢打赌,这会让一些非常愤怒的客户感到愤怒)。

Mac OS(旧的)是另一个奇怪的东西,只使用 CR 换行。

于 2013-03-08T09:17:09.333 回答