2012-01-20 11 views
5

मैं फ़ाइलों रूबी 1.9.2p290 से उनके नाम में यूनिकोड वर्ण है, कॉपी नहीं कर सकते विंडोज पर 7.रुबी में फ़ाइल नामों में यूनिकोड वर्णों वाली फ़ाइलों की प्रतिलिपि कैसे करें?

उदाहरण के लिए, मैं एक निर्देशिका में दो फ़ाइलें:

file 
ハリー・ポッターと秘密の部屋 

(दूसरा नाम जापानी वर्ण हैं आप इसे नहीं देख सकते हैं)

यहाँ कोड है:

> entries = Dir.entries(path) - %w{ . .. } 
> entries[0] 
=> "file" 
> entries[1] 
=> "???????????????" # <--- what? 

> File.file? entries[0] 
=> true 
> File.file? entries[1] 
=> false # <--- !!! Ruby can not see it and will not copy 

> entries[1].encoding.name 
=> "Windows-1251" 
> Encoding.find('filesystem').name 
=> "Windows-1251" 

तुम मेरी रूबी फाइल सिस्टम एन्कोडिंग मैं देख एस "विंडोज़ -1251" जो 8 बिट है और जापानी को संभाल नहीं सकता है। default_external और default_internal एन्कोडिंग को 'utf-8' में सेट करने से मदद नहीं मिलती है।

मैं उन फ़ाइलों को रूबी से कैसे कॉपी कर सकता हूं?

अद्यतन

मैं एक समाधान मिल गया। यह काम करता है अगर मैं Dir.entries के बजाय Dir.glob या Dir[] का उपयोग करता हूं। फ़ाइल नाम अब यूटीएफ -8 एन्कोडिंग में लौटाए गए हैं और इसकी प्रतिलिपि बनाई जा सकती है।

अद्यतन # 2

मेरे Dir.glob समाधान काफी सीमित हो गया लगता है। यह केवल "*" पैरामीटर के साथ काम करता है:

Dir.glob("*") # <--- Shows Unicode names correctly 
Dir.glob("c:/test/*") # <--- Does not work for Unicode names 
+0

हम्म, विंडोज 7, आपके मुद्दे को पुन: उत्पन्न करने की संभावना नहीं है। इस पोस्ट पर एक नज़र डालें, शायद यह किसी भी तरह सहायक हो सकता है: http://www.ruby-forum.com/topic/1593850 –

+1

क्या आपने अपनी कोड फ़ाइल के शीर्ष पर '# एन्कोडिंग: utf-8' जोड़ने का प्रयास किया था, या 'irb-ku' के रूप में irb चल रहा है? – Frost

+0

हाँ, मैंने किया, लेकिन इससे मदद नहीं मिली। – Evgenii

उत्तर

0

नहीं इतना एक वास्तविक समाधान है, लेकिन एक समाधान के रूप, यह देखते हुए:

Dir.glob("*") # <--- Shows Unicode names correctly 
Dir.glob("c:/test/*") # <--- Does not work for Unicode names 

तो ऐसा कोई कारण यदि आप ऐसा नहीं कर सकते हैं:

Dir.chdir("c:/test/") 
Dir.glob("*") 

?

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