2008-11-21 22 views
5

Dizindeki dosyaların bir listesini oluşturmak istiyorum. Bazı dosya isimleri Çince karakterler içerir.Dosya adlarında Çince karakterler içeren Ruby'yi kullanan yineleme dizini listesi

örn: senaryoyu Koşu

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

dosyaların bir listesini üretir ancak Çince karakterler karakterli (ters eğik çizgi ile değiştirilir takip edilmektedir: [试验]

.Test.txt ben aşağıdaki kodu kullanıyorum Sayılarla). Yukarıdaki örnek dosya adının kullanılması: "TestDir/[试验] .Test.txt" yerine "TestDir/[\ 312 \ 324 \ 321 \ 351] Test.txt":

.

Senaryo, Çince karakterleri çıkarmak için nasıl değiştirilebilir?

cevap

4

Ruby'nin kodunuzda unicode ile çalıştığınızı bilmesi gerekiyor. Aşağıdaki gibi, KCODE kullanarak uygun karakter kodlamasını ayarlayın:

$KCODE = 'utf-8' 

Sanırım utf-8 çince karakterler için yeterince iyi.

1

Aşağıdaki kod daha zariftir ve 'bul' gerektirmez. Çalışma dizini ne olursa olsun (veya koyduğunuz dizinin) dosyalarının bir listesini (ancak dizinleri değil) oluşturur.

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

Ve bir seviye kullanımını bir özyinelemeli kazma aşağı almak için: Ben tüm yol aşağı gitmek ama Dir.glob('**/*') bütün dosyası üzerinden gidecek almanın bir yolu yoktur eminim

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

Doğru hatırlamıyorsam sistemi.

İlgili konular