当前位置:  开发笔记 > 后端 > 正文

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

如何解决《当字符串保存到文件时,为什么\r\n被转换为\n?》经验,为你挑选了1个好方法。

该字符串源自以下内容的返回值:

> 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?有没有办法将字符串保存到文件中,在没有修改行结尾的情况下将其读回?



1> the Tin Man..:

这在IO.new文档中有所介绍:

必须单独使用以下模式,以及上面提到的一种或多种模式.

"b"  Binary file mode
     Suppresses EOL <-> CRLF conversion on Windows. And
     sets external encoding to ASCII-8BIT unless explicitly
     specified.

"t"  Text file mode

换句话说,Ruby与许多其他语言一样,可以感知它所处的操作系统,并且在文本模式下读取/写入文件时会自动在"\ r \n"< - >"\n"之间转换行尾.使用二进制模式以避免转换.


str = File.read('test.txt')

更好的做法是使用读取文件foreach,这样就不需要关心行尾; 你会分别获得每一行.另一种方法是使用readlines,但是它使用啜饮,这对于大文件来说可能非常昂贵.

此外,如果您正在处理邮件文件,我强烈建议您使用写入的内容而不是编写自己的文件.该邮件的宝石就是这样的一个包,是预先建立和行之有效的.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有