2010-07-11 9 views
6

, रैक 1.2.0 और ERB टेम्पलेट्समाणिक 1.9 + सिनात्रा असंगत वर्ण एन्कोडिंग: ASCII-8bit और UTF-8 मैं 1.9</p> <p>मैं सिनात्रा 1.0 का उपयोग कर रहा रूबी के लिए एक सिनात्रा आवेदन स्थानांतरित करने के लिए कोशिश कर रहा हूँ

जब मैं सिनात्रा यह काम करता है शुरू लेकिन जब मैं ब्राउज़र से वेब पेज का अनुरोध मैं इस त्रुटि मिलती है:

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

Encoding::CompatibilityError at/
incompatible character encodings: ASCII-8BIT and UTF-8 

सभी .rb फ़ाइलें इस शीर्ष लेख है

मुझे लगता है कि समस्या ERB फाइलों में है तो भी यह पता चलता है कि यह UTF-8 एन्कोडेड

[[email protected] views]$ file home.erb 
home.erb: UTF-8 Unicode text 

किसी भी एक से पहले इस समस्या थी कि? sinatra ruby ​​1.9 के साथ पूरी तरह से संगत नहीं है?

+0

फ़ाइलों को अस्थायी रूप से केवल एसीआईआई में बदलने का प्रयास करें। – Adrian

+1

समस्या यह है कि मुझे टेम्पलेट्स में utf-8 चार्टर का उपयोग करने की आवश्यकता है। – John

+0

यदि आप एचटीएमएल का उपयोग कर रहे हैं, तो आपको उन्हें इकाइयों के साथ बदलना चाहिए। अन्यथा, आप शायद यह देखने के लिए अस्थायी रूप से उन्हें बाहर ले जाने की कोशिश कर सकते हैं कि वे समस्या हैं या नहीं। – Adrian

उत्तर

15

मैं आपकी स्थिति के विनिर्देशों से परिचित नहीं हूं, लेकिन इस तरह की त्रुटि रूबी 1.9 में आई है जब स्रोत कोड में एक स्ट्रिंग को संयोजित करने का प्रयास किया जाता है (आमतौर पर यूटीएफ -8 में एन्कोड किया जाता है) स्ट्रिंग के साथ सिस्टम के बाहर से, उदाहरण के लिए, किसी HTML फॉर्म या डेटाबेस से डेटा से इनपुट।

ASCII-8BIT मूल रूप से बाइनरी के लिए समानार्थी है। यह सुझाव देता है कि इनपुट स्ट्रिंग को वास्तविक एन्कोडिंग के साथ टैग नहीं किया गया था जिसका उपयोग किया गया है (उदाहरण के लिए, यूटीएफ -8 या आईएसओ -885 9 -1)।

मेरी समझ यह है कि रूबी 1.8 में अपवाद संदेश नहीं देखे जाते हैं क्योंकि यह तारों को बाइनरी के रूप में मानता है और चुपचाप अलग-अलग एन्कोडिंग के तारों को जोड़ता है। सूक्ष्म कारणों से, यह अक्सर एक समस्या नहीं है।

मैं कल इसी तरह की त्रुटि में भाग गया और यह उत्कृष्ट अवलोकन पाया।

एक विकल्प दूर जाने के लिए अपने त्रुटि संदेश स्ट्रिंग बाहरी स्रोत से आने पर force_encoding ('UTF-8') (या कुछ अन्य एन्कोडिंग) का उपयोग करने के लिए है पाने के लिए। यह हल्के से नहीं किया जाना है, और आप प्रभावों का एहसास करना चाहते हैं।

0

मुझे एक ही समस्या थी। समस्या एक utf8 एन्कोडेड फ़ाइल थी जो हमें-ascii होना चाहिए। फ़ाइल से अजीब पात्रों को हटाने के बाद

$ file --mime-encoding somefile 
somefile: utf-8 

:

मैं file आदेश (पर OSX) का उपयोग कर जाँच की

$ file --mime-encoding somefile 
somefile: us-ascii 

यह मेरे लिए समस्या का समाधान हो।

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