我在 Ruby 中有一个字符串,s
(比如说)它可能有任何标准的行尾(\n
, \r\n
, \r
)。我想将所有这些转换为\n
s。最好的方法是什么?
这似乎是一个超级常见的问题,但没有太多关于它的文档。显然有简单粗暴的解决方案,但有没有内置的东西来处理这个问题?
优雅、惯用的 Ruby 解决方案是最好的。
编辑:意识到这一点^M
并且\r
是相同的。但是还是有三种情况。(参见维基百科。)
我在 Ruby 中有一个字符串,s
(比如说)它可能有任何标准的行尾(\n
, \r\n
, \r
)。我想将所有这些转换为\n
s。最好的方法是什么?
这似乎是一个超级常见的问题,但没有太多关于它的文档。显然有简单粗暴的解决方案,但有没有内置的东西来处理这个问题?
优雅、惯用的 Ruby 解决方案是最好的。
编辑:意识到这一点^M
并且\r
是相同的。但是还是有三种情况。(参见维基百科。)
从 ruby 1.9 开始,您可以使用String::encode
withuniversal_newline: true
来获取所有新行\n
,同时保持编码不变:
s.encode(s.encoding, universal_newline: true)
一旦处于已知的换行状态,您就可以使用:crlf_newline
. 例如:将一个未知(可能是混合)结尾的文件转换为CRLF
(例如),以二进制模式读取它,然后:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
最好的只是处理您想要专门更改的两种情况,而不是试图变得太聪明:
s.gsub /\r\n?/, "\n"
我认为最干净的解决方案是使用正则表达式:
s.gsub! /\r\n?/, "\n"
尝试在 NetBeans IDE 上打开它们——它之前问过我,在我从其他地方打开的一个项目中,我是否想修复行尾。我认为也可能有一个菜单选项,但这是我会尝试的第一件事。