Unicode имена файлов в Windows в Ruby - PullRequest
10 голосов
/ 24 апреля 2010

У меня есть кусок кода, который выглядит следующим образом:

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

Проблема возникает, когда у меня есть файл с именем こ ん に ち は 世界 .txt в каталоге, который я перечисляю. На компьютере с Windows 7 я получаю вывод:

???????.txt

С поиском в Google, правильное чтение этого имени файла в Windows кажется невозможной задачей. Есть предложения?

Ответы [ 3 ]

10 голосов
/ 29 декабря 2010

У меня была такая же проблема, и я просто выяснил, как получить записи каталога в UTF-8 в Windows. У меня сработало следующее (с использованием 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
4 голосов
/ 24 апреля 2010

Вам не повезло с чистым ruby ​​(1.8 или 1.9.1), поскольку он использует ANSI-версии Windows API.

Кажется, что Ruby 1.9.2 будет поддерживать имена файлов Unicode в Windows. Этот отчет об ошибке имеет цель 1.9.2. Согласно это объявление Ruby 1.9.2 будет выпущено в конце июля 2010 года.

Если вам действительно это нужно раньше, вы можете попробовать FindFirstFileW и т. Д. Напрямую через Win32API.new или win32-api.

0 голосов
/ 21 января 2012

Мое решение было использовать Dir.glob вместо Dir.entries. Но это работает только с параметром *. Не работает при прохождении пути (c: / dir / *). Протестировано в 1.9.2p290 и 1.9.3p0 в Windows 7.

Есть много других проблем с путями Unicode в Windows. Это все еще открытый выпуск . Патчи в настоящее время нацелены на Ruby 2.0, который, по слухам, 1007 * будет выпущен в 2013 году.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...