【发布时间】:2013-02-23 18:34:03
【问题描述】:
Windows 上换行符是 2 个字节的原因是什么? \n 不就是 ASCII 的一个字节吗?
【问题讨论】:
-
Windows 上的默认换行符是 \r\n - en.wikipedia.org/wiki/Newline
Windows 上换行符是 2 个字节的原因是什么? \n 不就是 ASCII 的一个字节吗?
【问题讨论】:
从历史上看,换行符由两个字符组成:U+000D 回车(我在这里使用 Unicode,因为这是我们现在使用的 - 那时它可能是 ASCII 或者甚至可能不是那个)和 U+000A 换行.这两个是必要的,因为一个会将打印头向前推进一行,而另一个会将其返回到下一行的开头。将其比作在打字机上转动纸卷(实际上,电传打字机没有别的,只是连接到计算机)并将托架向后移动,右侧的杠杆为您完成了这两项工作。
顺便说一句,大多数网络协议都保留了 CR+LF 序列,所以在某种程度上,这里的怪事是 Unix。当电传打字机不复存在并被视频终端和后来的终端仿真器取代时,两个字符序列不再需要物理。此外,它还使检查代码中的换行变得困难,因为您总是必须比较两个字节。因此,决定(Multics 和更高版本的)Unix 只保留一个字符,这将简化许多事情。 C 后来被指定在以文本模式读取或写入流时执行 U+000A 和平台原生换行序列之间的转换。
另一方面,Windows 通过 CP/M 和 DOS 继承了 CR+LF,没有任何有用的理由让他们更改该默认值。向后兼容性一直是微软的强项,他们不能在过去的某个时候打破这一点(我敢打赌,这会让一些非常愤怒的客户感到愤怒)。
Mac OS(旧的)是另一个奇怪的东西,只使用 CR 换行。
【讨论】: