2008-11-21 6 views
5

मैं निर्देशिका में फ़ाइलों की एक सूची उत्पन्न करना चाहता हूं। कुछ फ़ाइल नामों में चीनी वर्ण होते हैं।फ़ाइल नामों में चीनी वर्णों के साथ रुबी का उपयोग करके रिकर्सिव निर्देशिका सूची

जैसे:

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

स्क्रिप्ट चल रही फ़ाइलों की एक सूची का उत्पादन लेकिन चीनी अक्षरों से बच गया (बैकस्लैश बदल दिए जाते हैं पीछा किया: [试验] .Test.txt

मैं निम्नलिखित कोड का उपयोग कर रहा संख्याओं से)। ऊपर दिए गए उदाहरण फ़ाइल नाम का उपयोग करने से उत्पादन होगा:

"टेस्टडियर/[\ 312 \ 324 \ 321 \ 351] टेस्टडिक्स्ट" टेस्टडिटर/[试验]। टेस्ट.txt "के बजाय।

चीनी वर्णों को आउटपुट करने के लिए स्क्रिप्ट को कैसे बदला जा सकता है?

उत्तर

4

रूबी को यह जानने की जरूरत है कि आप अपने कोड में यूनिकोड से निपट रहे हैं। 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('**/*') पूरी फ़ाइल के माध्यम से जाना होगा प्राप्त करने के लिए है हूँ अगर मुझे सही याद है तो सिस्टम।

संबंधित मुद्दे

 संबंधित मुद्दे