Windows 上 Ruby 中的 Unicode 文件名

发布于 2024-08-30 06:20:38 字数 256 浏览 5 评论 0原文

我有一段代码,如下所示:

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

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

???????.txt

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

I have a piece of code that looks like this:

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

The problem comes when I have a file named こんにちは世界.txt in the directory that I list.
On a Windows 7 machine I get the output:

???????.txt

From googling around, properly reading this filename on windows seems to be an impossible task. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

流年已逝 2024-09-06 06:20:38

我有同样的问题&刚刚弄清楚如何在 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

I had the same problem & just figured out how to get the entries of a directory in UTF-8 in Windows. The following worked for me (using 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
神爱温柔 2024-09-06 06:20:38

您无法使用纯 ruby​​(1.8 或 1.9.1),因为它使用 ANSI 版本的 Windows API。

Ruby 1.9.2 似乎将支持 Windows 上的 Unicode 文件名。 此错误报告以 1.9.2 为目标。根据此公告,Ruby 1.9.2将于2010年7月下旬发布。

如果您确实需要更早,您可以尝试使用 FindFirstFileW 等。直接通过 Win32API.newwin32-api

You're out of luck with pure ruby (either 1.8 or 1.9.1) since it uses the ANSI versions of the Windows API.

It seems like Ruby 1.9.2 will support Unicode filenames on Windows. This bug report has 1.9.2 as target. According to this announcement Ruby 1.9.2 will be released at the end of July 2010.

If you really need it earlier you could try to use FindFirstFileW etc. directly via Win32API.new or win32-api.

隐诗 2024-09-06 06:20:38

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

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

My solution was to use Dir.glob instead of Dir.entries. But it only works with * parameter. It does not work when passing a path (c:/dir/*). Tested in 1.9.2p290 and 1.9.3p0 on Windows 7.

There are many other issues with unicode paths on Windows. It is still an open issue. The patches are currently targeted at Ruby 2.0, which is rumored to be released in 2013.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文