代码之家  ›  专栏  ›  技术社区  ›  Mark Stock

换行符

  •  3
  • Mark Stock  · 技术社区  · 16 年前

    您的软件是否处理来自其他系统的换行符?

    Linux/BSD    linefeed         ^J    10     x0A
    Windows/IBM  return linefeed  ^M^J  13 10  x0D x0A
    old Macs     return           ^M    13     x0D
    others?
    

    出于疯狂的原因,我打算在我的文本文件中使用Linux版本的换行符。但是,当我把文本文件带到Windows上时,有些程序不能很好地处理文本中的换行符。你会怎么处理这件事?

    8 回复  |  直到 16 年前
        1
  •  3
  •   Will Hartung    16 年前

    正如他们所说的,写什么要严格,读什么要自由。

    您的应用程序应该能够正确读取两个行尾。如果您想使用linefeed,并且可能会让Windows用户感到不安,那没关系。

    但除了记事本,我玩的大多数程序似乎对这两种方法都很满意。

        2
  •  1
  •   Ben Hoffstein    16 年前

    标准Python发行版附带了两个名为crlf.py和lfcr.py的命令行脚本(在工具/脚本中),它们可以在Windows和Unix/Linux行结尾之间进行转换。

    [Source]

        3
  •  1
  •   Jon Limjap    16 年前

    在.NET中,新行表示为 Environment.NewLine ,因此该框架的设计方式是在运行时使用系统的任何新行(CR+LF或仅CR或仅LF)。当然,这在Mono中最终是有用的。

        4
  •  0
  •   Greg Hewgill    16 年前

    大多数情况下,运行库将以特定于平台的方式自动处理行尾。例如,一个用 fopen(..., "r")

        5
  •  0
  •   Alan Moore Chris Ballance    16 年前

    据我所知,这是唯一的记事本,有问题的行分隔符。实际上,世界上任何其他软件都可以接受这三种类型的分隔符中的任何一种,也可以接受其他类型的分隔符。不幸的是,记事本现在是大多数计算机用户的首选编辑器。我认为微软让这种情况继续下去是极不负责任的。我从来没有玩过Vista,但我相信这个问题仍然存在,就像XP一样。有人知道下一个版本吗?

        6
  •  0
  •   PhiLho    16 年前

    正如其他人所说,如果需要的话,周围有很多(相当琐碎的)转换器。请注意,如果您在Ascii模式下使用FTP进行传输,它将自动进行转换。。。

    我看到的最烦人的是带有混合行结尾的文本文件,基本上是由人们在Unix上编辑Windows文件完成的,或者是在没有检查正确格式的情况下添加内容的实用程序。

        7
  •  0
  •   eonil    13 年前

    要想快乐,只需遵循标准中的建议即可。

    http://unicode.org/standard/reports/tr13/tr13-5.html

    并为旧MacOS等特殊情况提供选项。或者,如果您能够可靠地检测到它们,则可以自动处理该案例。

    但是Unix用户将体验到所有工具都无法正常工作。特别是对于Unix,请严格遵守标准。

    哦,如果您的Windows用户是开发人员,只需在Unix中使用文本格式化,并告诉他们这是Unix中的文件。

        8
  •  -2
  •   SCdF    16 年前

    我不确定你说“处理”是什么意思,但基本上你可以这样说:

    string convertLineBreaks(String line, String lineBreakYouWant) {
      replace all ^M^J or ^M or ^J in line with lineBreakYouWant
    
      return line
    }
    

    我想在重读你的问题后,你的意思是如何处理其他人的程序,这些程序不能处理不正确的(针对目标系统)换行。

    我建议1)使用一个可以处理文件的程序,或2)通过一个脚本运行文件,该脚本可以找到任何类型的换行符,然后将它们转换为适合您的系统的任何类型。