Kyl*_*yle 76 windows line-endings carriage-return linefeed
我理解两者之间的区别,所以没有必要进入,但我只是想知道为什么Windows使用CR和LF来表示换行的原因是什么.看起来Linux方法(只使用LF)更有意义,节省空间,更容易解析.
And*_*bel 84
历史上在使用时 点阵打印机 teletypes CR会将滑架返回到线路的第一个位置,而LF则会进入下一条线路.在文件中使用CR + LF可以直接将文件发送到打印机,而无需任何类型的打印机驱动程序.
谢谢@zaph指出它是电传而不是点阵打印机
OMA*_*OMA 23
@sshannin在Raymond Chen的博客上发布了一个URL,但它不再起作用了.博客已更改其内部软件,因此URL已更改.
在浏览新博客中的旧帖子后,我在这里找到了它.
从博客引用:
为什么线路终结器CR + LF?
该协议可以追溯到电传打字机的时代.CR代表"回车" - CR控制字符将打印头("托架")返回到第0列而不推进纸张.LF代表"换行" - LF控制字符使纸张前进一行而不移动打印头.因此,如果您想将打印头返回到零列(准备打印下一行)并推进纸张(因此它在新纸上打印),则需要CR和LF.
如果您转到各种Internet协议文档,例如RFC 0821(SMTP),RFC 1939(POP),RFC 2060(IMAP)或RFC 2616(HTTP),您将看到它们都指定CR + LF作为线路终止序列.所以真正的问题不是"为什么CP/M,MS-DOS和Win32使用CR + LF作为线路终结器?"而是"为什么其他人选择与这些标准文件不同并使用其他线路终结器?"
Unix采用普通LF作为线路终端序列.如果查看stty选项,您会看到onlcr选项指定是否应将LF更改为CR + LF.如果你错误地设置了这个设置,你会得到阶梯式的文字
每
线
开始
上一行停止的地方.因此,即使是unix,当处于原始模式时,也需要CR + LF来终止线路.LF之前的隐式CR是一个unix发明,可能作为经济,因为它每行节省一个字节.
C语言的unix祖先将此约定带入C语言标准,该标准仅需要"\n"(编码LF)来终止行,从而减轻了运行时库的负担,将原始文件数据转换为逻辑行.
C语言还引入了术语"换行符"来表达"通用行终止符"的概念.我被告知ASCII委员会在1996年左右将字符0x0A的名称改为"换行符",因此混淆程度已经提高到更高.
我已将第二个链接更改为The Wayback Machine中的快照,因为实际页面不再可用.
我希望这回答了你的问题.
Dav*_*kle 18
它来自昔日的电传打字机(和打字机).
过去,当你输入一行时,你必须将打字机的托架(它固定纸张并在键入时向左滑动)移回到行的开头(CR).然后,您必须将纸张向前推进(LF)以移动到下一行.
有些情况下你可能不想在返回马车时进行换行,例如你要用破折号删除一个角色(你只是覆盖它).
但基本上,它归结为惯例.DOS使用完整的CR/LF约定,UNIX缩短了一点.现在我们被困住了!
| 归档时间: |
|
| 查看次数: |
26197 次 |
| 最近记录: |