Ruby中Windows上的Unicode文件名

我有一段看起来像这样的代码:

Dir.new(path).each do |entry| puts entry end 

当我在列出的目录中有一个名为こんにちは世界.txt的文件时出现问题。 在Windows 7机器上,我得到输出:

 ???????.txt 

从谷歌搜索,在Windows上正确读取此文件名似乎是一项不可能完成的任务。 有什么建议?

你使用纯粹的ruby(1.8或1.9.1)是不合适的,因为它使用的是ANSI API的ANSI版本。

看起来Ruby 1.9.2将支持Windows上的Unicode文件名。 此错误报告以1.9.2为目标。 根据这一公告, Ruby 1.9.2将于2010年7月底发布。

如果你真的需要它,你可以尝试直接通过Win32API.newwin32-api使用FindFirstFileW等。

我遇到了同样的问题,并且想出了如何在Windows中以UTF-8获取目录条目。 以下对我有用(使用Ruby 1.9.2p136):

 opts = {} opts[:encoding] = "UTF-8" entries = Dir.entries(path, opts) entries.each do |entry| # example stat = File::stat(entry) puts "Size: " + String(stat.size) end 

我的解决方案是使用Dir.glob而不是Dir.entries。 但它只适用于*参数。 传递路径时它不起作用(c:/ dir / *)。 在Windows 7上测试了1.9.2p290和1.9.3p0。

Windows上的unicode路径还有许多其他问题。 这仍然是一个悬而未决的问题 。 这些补丁目前针对Ruby 2.0, 传闻将于2013年发布。