2009-12-23 26 views
5

मैंने एक रूबी स्क्रिप्ट लिखी है जो एक फ़ाइल (File.read()) पढ़ रही है जिसमें यूनिकोड वर्ण हैं, और यह कमांड लाइन से ठीक काम करता है।रुबी में यूनिकोड स्ट्रिंग्स 1.9

हालांकि, जब मैं इसे ऑटोमेटर वर्कफ़्लो (मैक ओएस एक्स) में डालने का प्रयास करता हूं, तो मुझे यह त्रुटि मिलती है;

2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError) 
(traceback) 

तो ऑटोमेटर से चलते समय, अचानक विभाजित गैर ASCII वर्ण पसंद नहीं है। जहां तक ​​मैं कह सकता हूं, दोनों रुबी के उसी संस्करण से चल रहे हैं (संस्करण संख्या वही है)।

मैं इस बारे में बहुत चिंतित नहीं हूं कि वे अलग-अलग क्यों काम कर रहे हैं (लेकिन अगर कोई जानता है, यह बहुत अच्छा है), लेकिन मैं अलग-अलग ASCII वर्णों को विभाजित करने का समाधान चाहता हूं।

यदि यह मदद करता है, तो मुझे एक वर्ण में पाठ को दो टुकड़ों में विभाजित करने की आवश्यकता है, इसलिए यदि सी के टोकनेज़र के समान कुछ ऐसा काम करेगा, तो मैं इसका उपयोग कर सकता हूं।

उत्तर

7

आप फ़ाइल के एन्कोडिंग निर्दिष्ट नहीं करते हैं। चूंकि फ़ाइल को स्वचालित रूप से एन्कोडिंग को विश्वसनीय रूप से निर्धारित करना असंभव है, इसलिए एन्कोडिंग को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। यदि ऐसा नहीं है, तो बाहरी एन्कोडिंग का उपयोग किया जाता है, यदि यह सेट नहीं है, तो पर्यावरण में निर्दिष्ट एन्कोडिंग का उपयोग किया जा रहा है, और यदि वातावरण एन्कोडिंग निर्दिष्ट नहीं करता है, तो फ़ाइल 7 में माना जाता है थोड़ा यूएस-एएससीआईआईआई।

आपके मामले में, ऐसा लगता है कि दो वातावरण में कोई अंतर है (स्वचालित स्क्रिप्ट अक्सर लोकल सेटिंग्स के बिना बहुत ही सीमित वातावरण में चलती हैं) या जिस तरह दुभाषिया को बुलाया जाता है।

तो, आप की तरह

File.read('/path/to/file', encoding: 'UTF-8') 
+0

यही काम किया, धन्यवाद कुछ करने की ज़रूरत होगी! –

1

लगता है जैसे दोनों अलग-अलग वातावरण से चल रहे हैं - विभिन्न LOCALE मूल्यों के साथ।

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