回车与换行的历史渊源与系统差异
回车与换行的历史渊源
在计算机尚未出现的时代,电传打字机(Teletype Model 33)是主要的文字输入设备。这种设备每秒钟可以打印10个字符,但在换行时需要0.2秒的时间,正好可以打印两个字符。如果在换行期间有新的字符传入,这些字符将会丢失。为了解决这一问题,研发人员在每行结尾添加了两个表示结束的字符:回车(Carriage Return)和换行(Line Feed)。回车告诉打字机将打印头定位在左边界,而换行则告诉打字机将纸张向下移动一行。
回车与换行在计算机系统中的演变
随着计算机的发明,回车与换行的概念被引入到计算机系统中。由于早期存储器价格昂贵,一些科学家认为在每行结尾添加两个字符过于浪费,只需一个字符即可。这一观点导致了不同操作系统在换行符使用上的分歧。
-
Unix系统:每行结尾只有换行符(\n)。
-
Windows系统:每行结尾是回车符加换行符(\r\n)。
-
Mac系统:每行结尾只有回车符(\r)。
这种差异导致了一个直接后果:Unix/Mac系统下的文件在Windows中打开时,所有文字会变成一行;而Windows文件在Unix/Mac中打开时,每行结尾可能会多出一个^M符号。
回车与换行在不同系统中的表现
在Windows系统中:
-
回车符(\r)将光标回到当前行的行首,之后的输出会覆盖之前的输出。
-
换行符(\n)将光标换到当前位置的下一位置,而不会回到行首。
在Unix系统中:
- 换行符(\n)会进行回车加换行的操作,回车符(\r)只会作为控制字符(^M)显示,不发生回车的操作。
在Mac系统中:
- 回车符(\r)会进行回车加换行的操作。
实际应用中的注意事项
在解析字符串或其他格式的文件内容时,常常需要判定回车换行的地方。这时要注意既要判定"\r\n"又要判定"\n"。例如,在Linux中执行以下命令:
```bash
$ echo -en '12\n34\r56\n\r78\r\n9' > tmp.txt
```
在Linux中使用vim打开的效果如下:
```
1234^M56^M78^M9
```
而在Windows中使用记事本打开的效果如下:
```
123456789
```
可以发现在Windows中只有"\r\n"才能正确触发我们理解的换行操作。
总结
回车与换行的概念起源于电传打字机,随着计算机的发展,它们在不同操作系统中表现出不同的形式。了解这些差异对于处理跨平台文件和数据解析具有重要意义。在实际应用中,开发者需要根据目标系统的特性,正确处理回车与换行符,以确保文件的正确显示和解析。