Ruby 当字符串保存到文件中时,\r\n为什么要转换为\n?

Ruby 当字符串保存到文件中时,\r\n为什么要转换为\n?,ruby,regex,newline,Ruby,Regex,Newline,该字符串作为返回值来自: > msg = imap.uid_fetch(uid, ["RFC822"])[0].attr["RFC822"] 在控制台中,如果键入msg,将显示一个长字符串,其中包含双引号,\r\n分隔每行: > msg "Delivered-To: email@test.com\r\nReceived: by xx.xx.xx.xx with SMTP id;\r\n" 如果我将它的一部分与正则表达式匹配,则返回值有\r\n: > msg[/Deliver

该字符串作为返回值来自:

> msg = imap.uid_fetch(uid, ["RFC822"])[0].attr["RFC822"]
在控制台中,如果键入msg,将显示一个长字符串,其中包含双引号,\r\n分隔每行:

> msg
"Delivered-To: email@test.com\r\nReceived: by xx.xx.xx.xx with SMTP id;\r\n"
如果我将它的一部分与正则表达式匹配,则返回值有\r\n:

> msg[/Delivered-To:.*?\s+Received:/i]
=> "Delivered-To: email@test.com\r\nReceived:"
如果将字符串保存到文件中,将其读回并与相同的正则表达式匹配,则得到\n而不是\r\n:

> File.write('test.txt', msg)
> str = File.read('test.txt')
> str[/Delivered-To:.*?\s+Received:/i]
=> "Delivered-To: email@test.com\nReceived:"
将字符串保存到文件时,\r\n是否转换为\n? 是否有办法将字符串保存到文件中,在不修改行尾的情况下将其读回?

这将在以下章节中介绍:

以下模式必须单独使用,并与上述一种或多种模式一起使用

更好的做法是使用
foreach
读取文件,这样就不需要关心行尾;您将分别获得每一行。另一种方法是使用
读线
,但它在大文件上使用


另外,如果您正在处理邮件文件,我强烈建议您使用编写的东西,而不是自己编写。gem就是这样一个预先构建并经过良好测试的软件包。

这可能是由于操作系统的原因吗?见此:
"b"  Binary file mode
     Suppresses EOL <-> CRLF conversion on Windows. And
     sets external encoding to ASCII-8BIT unless explicitly
     specified.

"t"  Text file mode
str = File.read('test.txt')