2009-08-24 13 views
5

दुर्भाग्यवश, यूनिकोड 0.1 (sudo gem install unicode) रूबी 1.9 पर काम नहीं करता है।रुबी 1.9 पर यूनिकोड मणि को कैसे बदलें?

require "rubygems" 
require "unicode" 

str = "áéíóúç" 
Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, "") 
#=> aeiouc 

मैं इसका इस्तेमाल उच्चारण चिह्न वर्ण हटाने के बिना, permalink को खिताब कन्वर्ट करने के लिए: मैं निम्नलिखित स्निपेट है।

क्या pack या unpack विधियों का उपयोग करके ऐसे ग्रंथों को परिवर्तित करने का कोई तरीका है?

+0

आपको रूबी-टॉक अभिलेखागार के माध्यम से खोदना चाहिए। मुझे पूरा यकीन है कि पिछले कुछ दिनों/हफ्तों के भीतर, यूनिकोड मणि के लेखक ने वहां एक नया संस्करण घोषित किया, और मुझे भी यकीन है कि उस धागे में रुबी 1.9 पर चर्चा की गई थी। मैंने वास्तव में धागे को नहीं पढ़ा, हालांकि, मेरे पास कोई विशिष्टता नहीं है। –

+0

दरअसल, वह * यूनिकोड मणि नहीं था, लेकिन यूनिकोड-यूटिल्स मणि नीचे उल्लिखित @ molf द्वारा वर्णित है। (यह पिछले कुछ दिनों में भी नहीं था, यह 3 महीने पहले था।) –

उत्तर

13

अद्यतन:

require "unicode_utils" 
UnicodeUtils.nfkd("áéíóúç").gsub(/[^\x00-\x7F]/,'').to_s 
#=> "aeiouc" 

इसकी संभावना आप रेल 'ActiveSupport पर निर्भर कर सकता है: एक बेहतर विकल्प मणि unicode_utils कि इन लापता सुविधाओं के लिए विशेष रूप से बनाया गया था का उपयोग करने के हो सकता है? तो आप निम्न कर सकते हैं:

require "activesupport" 
mb_str = ActiveSupport::Multibyte::Chars.new("áéíóúç") 
mb_str.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s 
#=> "aeiouc" 

ActiveSupport::Multibyte रूबी 1.8 के लिए UTF-8/यूनिकोड समर्थन लाने के लिए लिखा गया था, लेकिन 1.9 में भी ठीक काम करता है। यदि आप बाहरी निर्भरता के रूप में नहीं चाहते हैं तो आप the code में से कुछ उधार लेने में सक्षम हो सकते हैं।

+0

अच्छा प्रतिस्थापन! मैं एक रेल प्लगइन पर यूनिकोड मणि का उपयोग करता हूं, इसलिए सुनिश्चित करें कि मैं इस पर भरोसा कर सकता हूं! आपका बहुत बहुत धन्यवाद! हालांकि रूबी 1.9 का उपयोग करके प्रतिस्थापन करना अच्छा लगेगा, क्योंकि इसमें बहुत से रत्न हैं जो इसका उपयोग करते हैं और ActiveSupport उन सभी के लिए एक विकल्प नहीं हो सकता है। –

+0

यही वह है जिसे मैं उपरोक्त मेरी टिप्पणी में सोच रहा था। मुझे इसके बारे में याद दिलाने के लिए धन्यवाद! मुझे वास्तव में अभी अपने खिलौने परियोजना में इसकी आवश्यकता होगी। –

+0

मुझे लगता है कि रिक्तियों पर यूनिकोड को बदलते समय ActiveSupport के बजाय यूनिकोड-यूटिल्स मणि का उपयोग करना बेहतर है! धन्यवाद! ;) –

1

रेल में I18n.transliterate('string') विधि भी है। एक जादू की तरह काम करता है।

+0

मुझे इस विधि के संदर्भ नहीं मिल रहे हैं, क्या आप दस्तावेज़ीकरण के लिए एक लिंक प्रदान कर सकते हैं? धन्यवाद! – dgilperez

+0

'http: // apidock.com/रेल/सक्रिय समर्थन/इन्फलेक्टर/लिप्यंतरण –

+0

मैंने अपना उत्तर अपडेट किया, ऐसा लगता है कि' # to_latin' को हटा दिया गया है। –

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