UNIX 与 WINDOWS 文本换行的差异
闲来无事翻了翻《Java开发手册》,就看到了下面这条规约:
【强制】IDE 的 text file encoding 设置为 UTF-8;IDE 中文件的换行符使用 UNIX 格式,不要使用 WINDOWS 格式。
手册并未对该条规约进行解释,于是试着自己上网搜寻答案,下面是简单的记录与总结:
在计算机出现之前,有一种叫做电传打字机(Teletype Model 33)的打字机器。这种设备每秒可以打10个字符,但是存在一个问题:每打完一行都需要花费0.2秒的时间进行换行(正好可以打两个字符),在次区间如果有新的字符传入,那么字符就会消失。为了解决这个问题,研发人员在每行后面加上两个表示结束的字符:
- 回车:告诉打字机将打印头重新定位到打印纸的左侧
- 换行:告诉打印机将打印纸向下移动一行。
后来“回车”和“换行”的概念也被搬到了计算机上。在当时计算机的存储资源及其宝贵,一部分科学家认为使用两个字符作为每行文本的结果太浪费内存,使用一个就可以,一部分科学家则坚持继续使用两个字符,于是就产生了分歧。
在 UNIX 系统中,每行文本的结尾是“换行”字符,即“/n”;在 Windows 系统中,每行文本的结尾有“换行”和“回车”字符,即“/n/r”;在 Max 系统中,每行文本的结尾是“回车”字符。
操作系统 换行表示方式 Unix 换行 /n Max 回车 /r Windows 换行回车 /n/r 由于使用了不懂的换行表示方式,一个直接的后果就是,在 Unix、Mac 系统下编辑好的文本在 Windows 系统中打开时,所有文字都将变为一行;在 Windows 系统中编辑好的文本 在 Unix、Mac 系统中打开时,每行文本的结尾可能会多出一个^M符号。