2012-12-11 18 views
13

जब मैं rake test चलाता हूं, तो मुझे हर बार त्रुटि रेखा मिलती है।रेक परीक्षण और त्रुटि: लॉग लेखन विफल रहा। " xE2" ASCII-8BIT से UTF-8

log writing failed. "\xE2" from ASCII-8BIT to UTF-8 

कृपया इस पर मार्गदर्शन करें। इस त्रुटि को कैसे हटाएं।

+0

हम्म, क्या पश्व-अनुरेखन में लॉग लिखने प्रदर्शन कर रहा है? मुझे लगता है कि पहला सवाल यह निर्धारित करना है कि "\ xE2" मान आपके कोड द्वारा स्मृति में बनाया गया है, डेटाबेस से जारी है और पूछताछ की गई है, या ढांचे द्वारा बनाई गई है। –

उत्तर

16

आपके पास शायद आपके कोड में आउटपुट स्ट्रिंग करने की कोशिश कर रहा है जिसका एन्कोडिंग गलत है या कुछ अजीब अक्षर हैं और एन्कोडिंग काम नहीं करती है।

स्ट्रिंग को खोजने का सही तरीका होगा जिससे समस्याएं होती हैं और पता चलता है कि यह गलत एन्कोडिंग में क्यों है। स्ट्रिंग एपीआई (http://ruby-doc.org/core-2.2.0/String.html) में एन्कोडिंग और force_encoding देखें।

यदि आप लॉग में उस पंक्ति को मुद्रित करने में सक्षम होना चाहते हैं और त्रुटि से बचें तो आप उस स्ट्रिंग के साथ निम्न प्रक्रिया कर सकते हैं।

str = 'here is some string with wrong encoding and funny characters e.g. "\xE2"' 
# note if you do this in console, the str is encoded correctly 

# Rails.logger.info(str) # this would result in the error line 

# This will change the encoding and remove weird characters 
str = str.encode('utf-8', :invalid => :replace, :undef => :replace, :replace => '_') 

Rails.logger.info(str) # this now works 
+0

रूबीडॉक लिंक 404 है। – ablarg

+0

@ होली, वह पहला 'str' असाइनमेंट बिल्कुल सही नहीं है। चूंकि आप स्ट्रिंग निर्माण के लिए सिंगल कोट्स का उपयोग कर रहे हैं, इसलिए '\ x' का सम्मान नहीं किया जा रहा है। आपके उदाहरण को अद्यतन करने की आवश्यकता है: 'str =" यहां कुछ स्ट्रिंग है जो गलत एन्कोडिंग और मज़ेदार वर्णों जैसे \ xE2 "' और इस तरह, आप रेल कंसोल में समस्या को ठीक से पुन: उत्पन्न कर सकते हैं। जब मैं असाइनमेंट के लिए डबल कोट्स का उपयोग करता हूं, और '.encode' को कॉल नहीं करता हूं, तो अब मैं त्रुटि को पुन: उत्पन्न कर सकता हूं, जो मेरे लिए ऐसा लगता है:' ArgumentError: UTF-8' में अमान्य बाइट अनुक्रम। – stwr667

4

क्या आप postgresql का उपयोग कर रहे हैं? आपका डेटाबेस SQL_ASCII का उपयोग कर रहा है। आप जांच सकते हैं कि यह psql template1 -c 'show server_encoding' चलाकर डेटाबेस क्लस्टर हटाएं और इसे initdb -E utf8 /path/to/database के साथ पुन: प्रारंभ करें।

+0

चूंकि यह संभवतः रेल नहीं है, आप भूल जाते हैं कि आप रेलवे डीबी के साथ सीधे अपने डेटाबेस तक पहुंच सकते हैं और फिर 'सर्वर server_encoding दिखाएं; 'sans स्पष्ट रूप से उद्धरण। – engineerDave

1

मेरे मामले में कुछ अजीब उद्धरण चिह्न, इसलिए मैं सिर्फ उन्हें इस तरह सुरक्षित वर्णों से बदला अपराधी थे

msg = error.message.gsub(/[“”]/, "\"").gsub(/[‘’]/,"\'")