题
我有一串在红宝石, s
(说)可能有任何标准的行结束(\n
, \r\n
, \r
).我要把所有的那些 \n
s.什么是最好的方式吗?
这似乎是一个超级-的共同问题,但是没有太多的文件。显然还有简单粗解决方案,但是没有任何内处理这个吗?
优雅的,习惯用红宝石的解决方案是最好的。
编辑:意识到 ^M
和 \r
都是相同的。但仍存在三种情况。(见 维基百科.)
解决方案
最好的只是为了处理要明确并不会改变这两种情况试图让太聪明:
s.gsub /\r\n?/, "\n"
其他提示
由于ruby1.9可以使用 String::encode
与 universal_newline: true
得到你所有的新线 \n
而保持你的编码不变:
s.encode(s.encoding, universal_newline: true)
一旦在一个已知行国家可以自由转换回来CRLF使用 :crlf_newline
.例如:转换文件中的未知的(可能混合)的结局 CRLF
(例如),阅读它在二元模式,则:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
我认为干净的解决方案将是使用一个正则表达式:
s.gsub! /\r\n?/, "\n"
尝试在NetBeans IDE中打开它们 - 它的前问我,对我从其他地方打开的项目之一,如果我想修复行尾。我觉得可能是一个菜单选项来做到这一点,但是这将是我想尝试的第一件事。
不隶属于 StackOverflow