我使用heredoc制作了一些简单的示例数据,例如:
> str = <<TEXT
abc^M^M^M
def^M^M^M^M
TEXT
现在看看这个字符串的内容:
> p str
"abcrrndefrrrn"
请注意,三个回车符变为两个"r"
,四个回车符变为三个"r"
。 我也尝试了%q()
语法,结果相同。 将相同的数据放入文件中并读取它会产生具有正确"r"
数的正确字符串。
也许问题与"如何在 Ruby here 文档中保留/维护连续换行符?
PS:这既发生在文件中运行脚本,也发生在使用 Ruby 1.8.7-p371、1.9.3-p392 和 2.0.0-p247 的irb
中。
以下是 Ruby 在 MacOS 系统上看到的内容:
str = <<TEXT
abc^M^M^M
def^M^M^M^M
TEXT
str # => " abc^M^M^Mn def^M^M^M^Mn"
str = <<TEXT
abc
def
TEXT
str # => " abcnnnn defnnnnn"
Ruby 使用""作为行尾,如果我没记错的话,它会在内部与行尾进行转换。Ruby 知道各种操作系统所需的行端,并在读取/写入文本文件时尝试转换为该行端,因此在文件 I/O 期间可能会发生转换。
str = <<TEXT
abcnnn
defnnnn
TEXT
str # => " abcnnnn defnnnnn"
puts str
# >> abc
# >>
# >>
# >>
# >> def
# >>
# >>
# >>
# >>
如果在 Windows 上使用 IO、File 作为"文本"文件或 puts
输出最后一个str
,Ruby 应输出正确的行端,将 LF 字符转换为 CRLF 组合。换句话说,除非您正在写入二进制数据,否则您不必跳过箍来输出特定于操作系统或文件类型的行端。