Pet*_*ter 29 ruby newline line-breaks
我在Ruby中有一个字符串,s
(说)这可能拥有的任何标准行结尾的(\n
,\r\n
,\r
).我想将所有这些转换为\n
s.什么是最好的方式?
这似乎是一个超常见的问题,但没有太多关于它的文档.显然有简单的原油解决方案,但有没有内置的处理这个?
优雅,惯用的Ruby解决方案是最好的.
编辑:意识到^M
并且\r
是一样的.但仍有三种情况.(见维基百科.)
Gre*_*reg 39
从ruby 1.9开始,您可以使用String::encode
with universal_newline: true
来获取所有新行,\n
同时保持编码不变:
s.encode(s.encoding, universal_newline: true)
Run Code Online (Sandbox Code Playgroud)
一旦处于已知的换行状态,您就可以使用自由转换回CRLF :crlf_newline
.例如:将未知(可能是混合)结尾的文件转换为CRLF
(例如),以二进制模式读取,然后:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
Run Code Online (Sandbox Code Playgroud)
Jos*_*Lee 37
最好只是处理你想要特别改变的两种情况,而不是试图变得太聪明:
s.gsub /\r\n?/, "\n"
Run Code Online (Sandbox Code Playgroud)