究竟什么构成了文件末尾的换行符?

时间:2015-04-10 14:56:27

标签: parsing text language-agnostic newline

我个人尝试在所有源文件的末尾放置换行符,特别是在C ++世界中,编译器会为此条件生成警告。为了确保我已经完成了这项工作,我通常只是在我编辑的每个文件的末尾找一个空白行。

也就是说,许多不同的编辑似乎对最终换行符的处理方式不同(至少在Windows上)。考虑这个示例文件(我选择显示行号):

1: One
2: Two
3: Three
4:

此文件的十六进制输出如下:

4F6E650D 0A54776F 0D0A5468 7265650D 0A

请注意,此文件中的最后一个字符对是0D0A\r\n)。当我在各种编辑器或观众中打开这个文件时,他们都会做一些不同的事情:

显示第4行的编辑:

  • Sublime Text 3
  • Visual Studio
  • 记事本

未显示第4行的编辑:

  • SlickEdit的
  • VIM
  • WinMerge文件查看器
  • GitLab在线查看器

那么,究竟什么构成了“文件末尾的换行符?”这些(和其他)应用程序的差异仅仅是解析引擎的结果吗?是否应该显示第4行是否有“正确”的答案?在我看来,显示第4行是正确的选择。

1 个答案:

答案 0 :(得分:0)

这实际上与文件的结尾几乎没什么关系,它只是你所看到的效果。

您应该先问自己初始换行符的位置。它是在第一行的末尾,介于第一行和第二行之间,还是之前第二行?

很抱歉让你全部禅,但这基本上就是你所要求的。我一直认为是换行符"字符"成为它所遵循的行的一部分(可能基于我的C历史,fgets等)。

但是,正如你的一些编辑似乎认为的那样,我至少可以设想它在之间的之间的观点。这意味着他们将第4行视为一条空行而没有新行,这不是我订阅的视图 - 我的观点是,如果你有一个没有墙,地板或天花板的空房间,你不能把它称为房间。