Question: I have a string in Ruby, `s` (say) which might have any of the standard line endings (`\n`, `\r\n`, `\r`). I want to convert all of those to `\n`s. What's the best way?

This seems like a super-common problem, but there's not much documentation about it. Obviously there are easy crude solutions, but is there anything built in to handle this? 

*Elegant, idiomatic-Ruby solutions are best.*

EDIT: realized that `^M` and `\r` are the same. But there are still three cases. (See [wikipedia](http://en.wikipedia.org/wiki/Newline#Representations).)

Answer: 
Best is just to handle the two cases that you want to change specifically and not try to get too clever:

```
s.gsub /\r\n?/, "\n"

```
Since ruby 1.9 you can use [`String::encode`](https://ruby-doc.org/core-2.5.0/String.html#method-i-encode) with `universal_newline: true` to get all of your new lines into `\n` while keeping your encoding unchanged:

```
s.encode(s.encoding, universal_newline: true)

```

Once in a known newline state you can freely convert back to CRLF using `:crlf_newline`. eg: to convert a file of unknown (possibly mixed) ending to `CRLF` (for example), read it in binary mode, then :

```
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)

```