【问题标题】:What exactly constitutes a newline at the end of a file?文件末尾的换行符究竟是什么?
【发布时间】:2015-04-10 14:56:27
【问题描述】:

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

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

1: One
2: Two
3: Three
4:

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

4F6E650D 0A54776F 0D0A5468 7265650D 0A

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

显示第 4 行的编辑器:

  • 崇高文本 3
  • Visual Studio
  • 记事本

不显示第 4 行的编辑器:

  • SlickEdit
  • vim
  • WinMerge 文件查看器
  • GitLab 在线查看器

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

【问题讨论】:

    标签: parsing text language-agnostic newline


    【解决方案1】:

    这实际上与作为文件的结尾几乎没有关系,只是你看到的效果。

    你应该首先问自己initial换行符在哪里。是在第一行的末尾,第一行和第二行之间,还是第二行?

    很抱歉,你全神贯注,但这基本上就是你要问的。我一直认为换行符“字符”是它所遵循的行的一部分(可能基于我的 C 历史,fgets 等)。

    但是,我至少可以设想它在行之间的观点,正如你们的一些编辑似乎认为的那样。这意味着他们会将第 4 行视为空行,最后没有换行符,这不是我赞同的观点 - 我的观点是,如果你有一个没有墙壁、地板或天花板的空房间,你可以真的不叫它房间。

    无法设想将换行符视为下一行的开头。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 2011-08-14
      • 2011-03-03
      • 2018-03-12
      • 2014-10-28
      • 2012-08-27
      • 2010-11-12
      • 2011-03-18
      相关资源
      最近更新 更多