2008-11-21 11 views
5

我想生成一個目錄中的文件列表。一些文件名包含中文字符。在文件名中使用帶有中文字符的Ruby的遞歸目錄列表

如:試驗] .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

Ruby需要知道你在處理代碼中的unicode。使用KCODE設置適當的字符編碼,如下所示:

$KCODE = 'utf-8' 

我認爲utf-8足夠用於漢字。

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('**/*')將經歷整個文件系統,如果我沒記錯的話。

相關問題