2011-01-03 14 views
13

रूबी 1.8.7 (या रेल 2.x) में String.force_encoding() का उपयोग करने का कोई समाधान है ताकि यह रूबी 1.9 में काम करे? मैंने active_support की आवश्यकता के बारे में कुछ पढ़ा है, लेकिन यहरूबी 1.8.7 (या रेल 2.x)

$>मणि सूची - लॉकल | ग्रेप 'रेल \ | activesupport'

activesupport (3.0.3, 2.3.8, 2.3.5) 
rails (2.3.8, 2.3.5) 

$>माणिक -v

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0] 

$>रेल -v

Rails 2.3.8 

आईआरबी:

> require "rubygems" 
=> true 
> require "active_support" 
=> true 
> "asdf".force_encoding("UTF-8") 
NoMethodError: undefined method `force_encoding' for "asdf":String 
> String.respond_to?(:force_encoding) 
=> false 

उत्तर

13

एकमात्र चीज force_encoding 1.9 में है कि यह स्ट्रिंग के एन्कोडिंग फ़ील्ड को बदलती है, यह वास्तव में स्ट्रिंग के बाइट्स को संशोधित नहीं करती है।

रूबी 1.8 में स्ट्रिंग एन्कोडिंग की अवधारणा नहीं है, इसलिए force_encoding नो-ऑप होगा। आप इसे अपने आप को इस तरह जोड़ सकते हैं अगर आप 1.8 और 1.9 में एक ही कोड को चलाने के लिए सक्षम होना चाहते हैं:

class String 
    def force_encoding(enc) 
    self 
    end 
end 

वहाँ निश्चित रूप से अन्य बातों के आपको क्या करना है कि एन्कोडिंग 1.8 में एक ही काम करने के लिए किया जाएगा और 1.9, क्योंकि वे इस मुद्दे को बहुत अलग तरीके से संभालते हैं।

+0

शायद एक बेवकूफ सवाल है, लेकिन मेरे कोड में मुझे यह कहां जोड़ना चाहिए? – RealCasually

+0

कहीं भी, कम या ज्यादा करेंगे। इसे एक फ़ाइल में रखें और उस फ़ाइल के लिए 'आवश्यकता' जोड़ें, जिसमें आपकी सभी अन्य आवश्यकताएं आपके "मुख्य" '.bb' के शीर्ष पर हों। – Theo

21

यह आपको दोनों रूबी 1.8.7 और रूबी 1.9 में स्ट्रिंग # to_my_utf8 दे देंगे:

require 'iconv' 
class String 
    def to_my_utf8 
    ::Iconv.conv('UTF-8//IGNORE', 'UTF-8', self + ' ')[0..-2] 
    end 
end 

और फिर ...

?> "asdf".to_my_utf8 
=> "asdf" 

Paul Battley से प्रेरित होकर और भी मेरे पुराने में से कुछ को याद remote_table gem पर काम करें।

+0

बढ़िया, यह अच्छा है! – Fu86

+1

जिज्ञासा से बाहर: दो रिक्त स्थान क्यों जोड़ें और फिर रूपांतरण के बाद उन्हें हटा दें? – Theo

+3

वह पॉल बैटल का योगदान है ... जैसा कि वह कहता है, "खतरनाक बाइट्स 1 9 4-253 की श्रेणी में हैं" ... यदि स्ट्रिंग उन लोगों में से एक के साथ समाप्त होती है, तो रूपांतरण कभी-कभी उड़ाता है। –

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