Имена файлов Unicode для Windows в Ruby
У меня есть фрагмент кода, который выглядит так:
Dir.new(path).each do |entry|
puts entry
end
Проблема возникает, когда у меня есть файл с именем こ ん に ち は 世界.txt в списке, который я перечисляю.
На машине с Windows 7 я получаю вывод:
???????.txt
От googling вокруг, правильное чтение этого имени файла на окнах кажется невыполнимой задачей. Любые предложения?
Ответы
Ответ 1
Вам не повезло с чистым рубином (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
.
Ответ 2
У меня была такая же проблема, и я просто понял, как получить записи в 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
Ответ 3
Моим решением было использовать Dir.glob
вместо Dir.entries. Но он работает только с параметром *. Это не работает при прохождении пути (c:/dir/*). Протестировано в версиях 1.9.2p290 и 1.9.3p0 в Windows 7.
Есть много других проблем с путями unicode в Windows. Он по-прежнему является открытой проблемой. Патчи в настоящее время нацелены на Ruby 2.0, который по слухам будет выпущен в 2013 году.