私は Windows で Ruby 1.9.3 を使用しており、ファイル名を 1 行に 1 つずつファイルに書き込み (ファイルリストと呼びます)、後でこのファイルリストを読み取り、system() を呼び出して別のプログラムを実行するアクションを実行しようとしています。ここで、ファイルリストからファイル名を渡します。私が system() で呼び出しているそのプログラムは、私が渡したファイル名を受け取り、独自のシステムで使用されるバイナリ形式に変換します。
system() を呼び出す時点まで、すべてが機能します。UTF-8 ファイルリストがあり、ファイルリストからファイル名を読み取ると適切な結果が得られます。しかし、私が走るとき
system("c:\foo.exe -arg #{bar}")
渡される引数 "bar" が UTF-8 形式ではありません。日本語、中国語、またはその他のファイル名を使用してプログラムを手動で実行すると、正常に動作し、ファイルが正しくコーディングされますが、system() を使用して実行するとうまくいきません。問題なく他の場所で使用しているため、 bar の変数が適切に保存されていることはわかっています。
私も試しました:
system("c:\foo.exe -arg #{bar.encoding("UTF-8")}")
system("c:\foo.exe -arg #{bar.force_encoding("UTF-8")}")
どちらも機能しません。ここでの問題は、ユニコードをシステムに渡すことだけだと思います。
システムが実際にこれをサポートしているかどうかを他の誰かが確認できますか?
コードのブロックは次のとおりです。
$fname.each do |file|
flist.write("#{file}\n") # This is written properly in UTF-8
system("ia.exe -r \"#{file}\" -q xbfadd") # The file being passed here is not encoding right!
end