【发布时间】:2012-07-30 21:18:35
【问题描述】:
我在 Windows 中使用 Ruby 1.9.3 并尝试执行一个操作,即我将文件名写入每行一个文件(我们将其称为文件列表),然后读取此文件列表,并调用 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")}")
两者都不起作用。我只能假设这里的问题是将 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
【问题讨论】:
-
这似乎是一个长期存在的问题,在 Ruby 方面与 Windows 的糟糕集成。显然直到最近它仍然在很多事情上使用 ANSI API,
system可能被忽略了。