1

私はまだRubyを学んでいるので、ここで何か間違っていると確信していますが、WindowsでRuby 1.9.3を使用すると、特定のサイズになるランダムなASCIIガベージを含むファイルを書き込む際に問題が発生します。QA を行っているアプリケーションのテスト用に、これらのファイルを作成できる必要があります。Mac と *nix では、ファイル サイズは毎回正しく書き込まれます。ただし、Windows では、通常 1,024 バイトから 1,031 バイトの間のランダムなサイズのファイルが生成されます。

問題は、rstr が生成している文字の 1 つが 2 文字としてカウントされていることだと確信していますが、これは起こるべきではないようです。

これが私のコードです:

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)
4

2 に答える 2

2

デフォルトでは、Windows で開かれるファイルはテキスト モードで開かれます。つまり、行末やその他の詳細が調整されます。

ファイルを必要に応じて正確にバイト単位で書き込みたい場合は、ファイルをバイナリ モードで開く必要があります。

File.new("foo", "wb") do |f|
  # ...
end

bPOSIX オペレーティング システムでは無視されるため、スクリプトはクロスプラットフォーム互換になりました。

注: ブロック構文を使用してファイルを管理し、ブロックが実行されるとファイル ハンドラーを適切に閉じて破棄するようにしました。ファイルを閉じることを心配する必要はもうありません ;-)

お役に立てれば。

于 2012-07-19T15:54:04.963 に答える
0

255 ASCII はありません。値は 0 ~ 254 です。printf を実行しようとすると255.chr、マルチバイト文字が表示されます。Windows は標準の utf-8 ではないため、正しくない値が得られます。したがって、あなたが直面している問題です!

#coding: utf-8ファイルの先頭に追加してみてください。それは物事を働かせるはずです。

于 2012-07-19T15:38:09.497 に答える