我还在学习ruby,所以我确定我在这里做错了,但在windows上使用ruby 1.9.3,我在编写带有随机ascii垃圾的文件时遇到问题。我需要能够在我正在测试的应用程序上编写这些文件进行测试。在Mac和* nix上,每次都正确写入文件大小。但是在Windows上,它会生成随机大小的文件,通常介于1,024字节和1,031字节之间。
我确定问题是rstr生成的字符之一是计算为两个字符,但......似乎不应该这样。
这是我的代码:
num = 10
k = 1
for i in 1..num
fname = "f#{i}.txt"
f = File.new(fname, "w")
for k in 1..size
rstr = "#{(1..1024).map{rand(255).chr}.join}"
f.write rstr
print " #{rstr.size} " # this returns 1024 every time.
rstr = ""
end
f.close
end
也尝试过:
opts = {}
opts[:encoding] = "UTF-8"
fname = "f#{i}.txt"
f = File.new(fname, "w", opts)
答案 0 :(得分:2)
默认情况下,在Windows中打开的文件以文本模式打开,这意味着会调整行结尾和其他详细信息。
如果您希望文件按照您想要的方式逐字节写入,则需要以二进制模式打开文件:
File.new("foo", "wb") do |f|
# ...
end
在POSIX操作系统上忽略了b
,因此您的脚本现在可以跨平台兼容。
注意:我使用块语法来管理文件,以便在块执行后正确关闭并处理文件处理程序。您不再需要担心关闭文件; - )
希望这有帮助。
答案 1 :(得分:0)
没有任何255个ASCII。值从0到254。
如果您尝试printf 255.chr
,您将获得多字节字符。
由于Windows不标准utf-8,您将获得不正确的值。因此,你面临的问题!
尝试在文件顶部添加#coding: utf-8
。它应该让事情有效。