File.write并没有写出我想要的内容

时间:2014-04-08 10:16:39

标签: ruby file binary

我有一个非常简单的例子:

content = [0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x0D, 0x0A] # "Hello\r\n"
f = File.new("PATH", "w")
content.each {|b| f.write(b.chr)}
f.close

我试图写一些文件,然后我发现,Ruby为每个\r\r以及每个\n\r\n写道。因此,当我运行我的代码示例时,Ruby不会将Hello\r\n写入文件,而是编写Hello\r\r\n有没有办法防止这种情况或写入每个字节而不添加其他字节?

1 个答案:

答案 0 :(得分:4)

文档IO Open Mode

中提到的原因
  

“b” - 二进制文件模式。抑制EOL< - >除非明确指定,否则在Windows上进行CRLF转换并将外部编码设置为ASCII-8BIT。

因此,您需要使用'wb'代替'w'来解决您的问题。

您可以编写如下代码:

content = [0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x0D, 0x0A] # "Hello\r\n"
f = File.new("PATH", "wb")
content.each {|b| f.write(b.chr)}
f.close
相关问题