रेल्स और रूबी 1.9 के साथ अमान्य मल्टीबाइट चार (यूएस-एएससीआईआई)


197

मैं रूबी 2.3.1 के साथ रूबी 1.9.1 का उपयोग कर रहा हूं। मेरा आवेदन टेक्स्ट इनपुट को संभालने के लिए है

अगर मैं कुछ कोशिश करूं तो (अंदर के उद्धरण चिह्न अलग दिखेंगे)

text = "”“"

मुझे निम्नलिखित त्रुटि मिलती है:

#<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII)
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end

मुझे उन उद्धरण चिह्नों को उपयोगकर्ता करने की आवश्यकता है क्योंकि उपयोगकर्ता उन्हें इनपुट कर सकते हैं और मुझे इसके लिए जवाब देना होगा?

कोई विचार?


यदि आपके कोड में कोई बैकटिक्स नहीं है, लेकिन आपको बैकटिक्स का उपयोग करने का "आरोपी" बनाया जा रहा है, तो आपकी फ़ाइल में कुछ अजीब रिक्ति / टैब्स / न्यूलाइन मुद्दे हो सकते हैं। उदाहरण के लिए एक StackOverflow रिक्त में इसे पोस्ट करने का प्रयास करें, और SO अजीब अभिनय करना शुरू कर देगा। अजीब रिक्त स्थान और टैब और newlines निकालें। फिर से, कोड को एक एसओ रिक्त में चिपकाने और प्रस्तुति के लिए अपने कोड को प्रारूपित करने की कोशिश करना अपने आप को संकेत देने का एक तरीका है।
boulder_ruby

जवाबों:


691

क्या आपने स्क्रिप्ट में एक जादुई टिप्पणी जोड़ने की कोशिश की है जहां आप गैर-एएससीआईआई चार्ट का उपयोग करते हैं? इसे स्क्रिप्ट के ऊपर जाना चाहिए।

#!/bin/env ruby
# encoding: utf-8

इसने मेरे लिए एक आकर्षण की तरह काम किया।


2
हम्म ......... ने उसे फ़ाइल के शीर्ष पर जोड़ा लेकिन फिर भी वही त्रुटि संदेश मिलता है। कोई सुझाव?
आर्टेम कलिनचुक

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

2
#!/bin/env rubyजब तक आप स्क्रिप्ट को कमांड लाइन से एक निष्पादन योग्य के रूप में नहीं चला रहे हैं, तब तक आवश्यक नहीं है। # encodingलाइन से ही काम करता है।
gak

10
# encoding: utf-8। 2013 की देर हो चुकी है और हमें अभी भी यह खेल खेलना है। पकड़ो, फोन बज रहा है ... यह 2033 था, उन्होंने कहा कि वे अभी भी इसे खेलते हैं। ओह ठीक है, मुझे याद दिलाने के लिए धन्यवाद, 2010 से जारेक ज़ुमडज़िंस्की।
थोमैक्स

1
@gotqn - कृपया यहाँ एक ही लेख देखें - graysoftinc.com/character-encodings/…
आलोक स्वेन

43

यदि आप किसी प्रोजेक्ट की सभी स्रोत फ़ाइलों पर आसानी से जादू की टिप्पणी जोड़ना चाहते हैं, तो आप magic_encodingमणि का उपयोग कर सकते हैं

sudo gem install magic_encoding

तो बस magic_encodingअपने ऐप के रूट से टर्मिनल में कॉल करें ।


मुझे लगता है कि इस तरह के विवरणों को याद रखना महत्वपूर्ण है, इसलिए मैं कम से कम कुछ महीनों तक # एन्कोडिंग: utf-8 को मैन्युअल रूप से लिखने के लिए उस मणि का उपयोग नहीं करूंगा।
मार्सेल वाल्डेज़ ओरोज़्को

रेलगाड़ियों पर 'रत्न मैजिक_केनोडिंग' जोड़ना रेल पर 2.3 और रूबी 1.9 मदद की
एल्मोर

यह ककड़ी परीक्षणों में एकीकृत नहीं है।
ट्रिप

1
@ ईल्मोर आपको अपनी परियोजना के जेमफाइल की तरह बाहरी पुस्तकालयों को कभी नहीं रखना चाहिए। magic_encodingसिर्फ एक कमांड-लाइन टूल है, न कि प्रोजेक्ट डिपेंडेंसी।
नाऊकेर

17

मैं सिर्फ अपना समाधान जोड़ना चाहता हूं:

मैं um, ü, ä जैसे जर्मन umlauts का उपयोग करता हूं और वही त्रुटि मिली।
@ जेरेक ज़ुमडज़िंस्की ने आपको बताया कि यह कैसे काम करता है, लेकिन यहाँ मेरा है:

इस कोड को अपने नियंत्रक के शीर्ष पर जोड़ें: # encoding: UTF-8
(उदाहरण के लिए umlauts के साथ फ्लैश संदेश का उपयोग करने के लिए)

मेरे नियंत्रक का उदाहरण:

# encoding: UTF-8
class UserController < ApplicationController

अब आप ö, ä, ü, "," ", आदि का उपयोग कर सकते हैं।


8

उन slanted डबल कोट्स ASCII वर्ण नहीं हैं। त्रुटि संदेश उनके बारे में भ्रामक है 'बहु-बाइट'।


2
यह भ्रामक क्यों है? वे कर रहे हैं multibyte अक्षर।
मैथ्यू शारले

4
क्योंकि ASCII किसी भी मल्टी-बाइट एन्कोडिंग को परिभाषित नहीं करता है। जैसा कि ASCII का संबंध है, वे अस्पष्ट हैं, जो संबंधित एन्कोडिंग में मान्य होता है।
फिल मिलर

8

बस ध्यान दें कि रूबी 2.0 के रूप में जोड़ने की आवश्यकता नहीं है # encoding: utf-8। UTF-8 का स्वतः पता लगाया जाता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.