2012-07-04 14 views
12

मैं सिर्फ RSpec उपयोग शुरू कर दिया है और मैं सिर्फ यह सुनिश्चित चीज़ें अपेक्षित ढंग से काम कर रहे हैं बनाने के लिए RSpec GitHub रेपो पर बहुत ही साधारण परीक्षण की नकल की:अंतर्राष्ट्रीय पर रूबी के साथ RSpec का उपयोग कर वर्ण

require 'spec_helper' 

describe 'Home Page' do 
    it "Welcomes the user" do 
    visit '/products' 
    page.should have_content("Welcome") 
    end 
end 

समस्याओं शुरू जब मैं स्ट्रिंग को "ओला" या "कैस्बा" जैसे कुछ में बदलता हूं। एक विशेष चरित्र के साथ कोई स्ट्रिंग। जब मैं ऐसा करता हूं, तो मुझे निम्न त्रुटि मिलती है:

invalid multibyte char (US-ASCII) (SyntaxError) 
invalid multibyte char (US-ASCII) 
syntax error, unexpected $end, expecting ')' 
page.should have_content("Olá") 

इसे ठीक करने के तरीके पर कोई विचार? शायद कुछ विन्यास विकल्प? धन्यवाद एक बहुत

+0

अपनी फ़ाइल ASCII या UTF-8 के रूप में बचाता है? – LanguagesNamedAfterCofee

+0

फ़ाइलें के रूप में सहेजा गया UTF-8 – thyagx

उत्तर

28

सबसे अधिक संभावना आप अपनी फ़ाइल के शीर्ष पर एक magic comment छूट रहा है:

# encoding: UTF-8 

इस निर्देश रूबी डिफ़ॉल्ट US-ASCII एन्कोडिंग के साथ अपनी फ़ाइल की व्याख्या करने की कोशिश करता है और इस चरित्र के बाद से विफल रहता है के बिना सेट में á या ç जैसे प्रतीक शामिल नहीं हैं।

यहाँ जेम्स एडवर्ड ग्रे द्वितीय ने रूबी में एक blog post डिफ़ॉल्ट पर स्रोत एन्कोडिंग है।

+2

BTW वहाँ एक अच्छा मणि [magic_encoding] कहा जाता है (https://github.com/m-ryan/magic_encoding/) आप जल्दी से फ़ाइलें .rb को यह टिप्पणी जोड़ने के लिए मदद मिल सकती है। –

+0

धन्यवाद एक बहुत KL-7, कि यह ठीक करता है :) magic_encoding मणि भी बहुत उपयोगी है, धन्यवाद @naliwajek – thyagx

+0

कि .. unexpectantly वास्तव में आसान था। धन्यवाद! – Trip

0

अंतर्राष्ट्रीय वर्ण लगभग हमेशा यूएस-एएससीआईआईआई की सीमा के बाहर मूल्यों का उपयोग करते हैं, जो केवल आपके कीबोर्ड पर पाए जाने वाले प्रतीकों का एक छोटा सा सेट है (यदि आप यूएस कीबोर्ड का उपयोग करते हैं)। लहजे, चंचलता, या यहां तक ​​कि वर्ण भी नहीं हैं (उदाहरण के लिए इमोटिकॉन्स) एक से अधिक बाइट में दर्शाए जाते हैं, जो कि यूएस-एएससीआईआई का प्रतिनिधित्व करने के लिए उपयोग किया जाता है। चरित्र के लिए संख्यात्मक मूल्य के मैपिंग को एन्कोडिंग कहा जाता है। यूएस-एएससीआईआई के बाद, आईएसओ -88 9 1-1 है, जो फ़ाइल (ज्यादातर स्पेनिश, फ्रेंच, स्वीडिश इत्यादि) में उच्चारण जोड़ता है (उदाहरण: é, å, ü, आदि)। उसके बाद, आप यूनिकोड, जो ˝ जैसी चीज़ें शामिल हैं, मिल ‰, हे,, ◊, या लगभग किसी भी प्रतीक आप में किसी भी भाषा के बारे में सोच सकते हैं।

रूबी, डिफ़ॉल्ट रूप से, एक कार्यक्रम के एन्कोडिंग और US-ASCII के रूप में यह में तार के सभी है। आप या तो जादू टिप्पणी के साथ पूरे फ़ाइल की एन्कोडिंग (और यह सब कुछ) को बदल सकते हैं (@ KL-7 के जवाब देखें) या आप स्ट्रिंग के आधार द्वारा एक स्ट्रिंग पर इसे बदल सकते हैं:

"Olé".force_encoding("ISO-8891-1") 

रूबी भी समर्थन करता है एएससीआई 8-बिट नामक एक काल्पनिक एन्कोडिंग, जो अनिवार्य रूप से बाइनरी डेटा नहीं है जिसमें कोई एन्कोडिंग नहीं है।

+1

मुझे लगता है कि 'force_encoding' बाद में स्ट्रिंग के साथ काम करने में मदद कर सकता है, लेकिन यह मूल स्ट्रिंग शाब्दिक को पार्स करने में दुभाषिया की मदद नहीं करेगा। क्या मैं सही हू? रुबी में स्ट्रिंग एन्कोडिंग पर एक संबंधित [आलेख] (http://blog.grayproductions.net/articles/ruby_19s_string) है। –

+0

@ केएल -7: हाँ। आप सही हे। आपको एक जादू टिप्पणी की ज़रूरत है। – Linuxios

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