5

我想在一个目录中生成一个文件列表。一些文件名包含中文字符。

例如:[试验].Test.txt

我正在使用以下代码:

require 'find'
dirs = ["TestDir"]
for dir in dirs
    Find.find(dir) do |path|
    if FileTest.directory?(path)
    else
        p path
    end
    end
end

运行脚本会生成一个文件列表,但中文字符会被转义(替换为反斜杠后跟数字)。使用上面的示例文件名将产生:

“TestDir/[\312\324\321\351]Test.txt”而不是“TestDir/[试验].Test.txt”。

如何修改脚本以输出汉字?

4

2 回答 2

4

Ruby 需要知道您正在处理代码中的 unicode。使用 KCODE 设置适当的字符编码,如下所示:

$KCODE = 'utf-8'

我认为 utf-8 对于汉字来说已经足够了。

于 2008-11-21T18:31:59.077 回答
1

以下代码更优雅,不需要“查找”。它会在工作目录(或您放入的任何目录)中生成文件列表(但不是目录)。

Dir.entries(Dir.pwd).each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end 

并获得递归挖掘一个级别使用:

Dir.glob('*/*').each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end

我确信有一种方法可以让它一直向下运行,但Dir.glob('**/*')如果我没记错的话会遍历整个文件系统。

于 2012-06-07T14:35:43.427 回答