我在 Windows 中使用 Ruby 1.9.3 并尝试执行一个操作,我将文件名写入每行一个文件(我们将其称为文件列表),然后读取此文件列表,并调用 system() 运行另一个程序我将从文件列表中传递一个文件名。我用 system() 调用的那个程序将采用我传递给它的文件名并将其转换为二进制格式以在专有系统中使用。
在调用 system() 之前一切正常。我有一个 UTF-8 文件列表,从文件列表中读取文件名给了我正确的结果。但是当我跑步时
system("c:\foo.exe -arg #{bar}")
传递的 arg“bar”不是 UTF-8 格式。如果我使用日语、中文或任何文件名手动运行程序,它可以正常工作并正确编码文件,但如果我使用 system() 执行它就不会。我知道 bar 中的变量已正确存储,因为我在其他地方使用它没有问题。
我也试过:
system("c:\foo.exe -arg #{bar.encoding("UTF-8")}")
system("c:\foo.exe -arg #{bar.force_encoding("UTF-8")}")
也不工作。我只能假设这里的问题是将 unicode 传递给系统。
其他人可以确认系统是否确实支持或不支持这一点?
这是代码块:
$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