2011-05-23 15 views
9

के साथ रेल में रूबी रेगेक्स का अजीब व्यवहार गैर-मानक utf-8 वर्ण का उपयोग करते समय मुझे अपने सत्यापन रेगेक्स में से एक के साथ समस्या है। इसलिए, मैं कुछ प्रयोग चलाता हूं और ऐसा प्रतीत होता है कि रेल वातावरण या सादे रूबी के साथ रूबी रेगेक्स अलग व्यवहार करता है।utf8 char

मैं यहां एक चीनी स्ट्रिंग के साथ अपना एक्सपर्टमेंट पोस्ट करता हूं।

गहरे लाल रंग का "शुद्ध" में:

string = "運動會" 
puts string[/\A[\w]*\z/] 
=> match "運動會" - ok 

रेल में:

# coding: utf-8 
task :test => :environment do 
    string = "運動會" 
    puts string[/\A[\w]*\z/] 
end 
$ rake test 
=> nothing - not ok 

अगर मैं # coding: utf-8 छोड़ देते हैं, यह invalid multibyte char (US-ASCII) साथ आता है। वैसे भी, इसके साथ भी, यह मेल नहीं खाता है।

  • रेल 3.0.7
  • रूबी 1.9.2 (:

    बेशक, मैं सब कुछ (ruby_version, utf-8 में स्क्रिप्ट फ़ाइलें की एन्कोडिंग ..)

    मैं उपयोग जाँच कर ली है रूबी-1.9.2-पी 180)

तो मेरा निष्कर्ष यह है कि रेलवे रेगेक्स व्यवहार के तरीके को बदलती है और मुझे इसे सामान्य रूबी में व्यवहार करने का कोई तरीका नहीं मिला।

+1

वास्तव में ROR के साथ मदद नहीं कर सकता, लेकिन +1 एक अच्छा सवाल के लिए - यह स्पष्ट आप की कोशिश की है और अपना होमवर्क किया था। – Kobi

+0

धन्यवाद, हाँ, मैं यूटीएफ -8 और रूबी 1.8/1.9 के बारे में महान लेख ढूंढ रहा हूं लेकिन इस मुद्दे से संबंधित कुछ भी नहीं। – Hartator

+0

FWIW - आपका परीक्षण 1.8.7 में काम करता है - यह सुनिश्चित नहीं है कि यह आपके लिए एक विकल्प है या नहीं। – smathy

उत्तर

7

ठीक है, मुझे मेरी समस्या का उत्तर मिला। \w रूबी 1.8 में सभी यूनिकोड कैरेक्टर के खिलाफ रूबी 1.9 में केवल एसीआई चरित्र के साथ व्यवहार करता है। [\w\P{ASCII}]

अधिक जानकारी:: गहरे लाल रंग का 1.9 में, अब हम का उपयोग करने के http://www.ruby-forum.com/topic/210770

+1

ब्रेकेज का पता लगाने के लिए कितना अच्छा मूक और कठिन :) – Sebastian