मैं गूगल के प्रवेश से कुछ क्षेत्रोंरेल omniauth और UTF-8 त्रुटियों
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
"omniauth"=>
{"user_info"=>
{"name"=>"Joe McÙisnean",
"last_name"=>"McÙisnean",
"first_name"=>"Joe",
"email"=>"[email protected]"},
"uid"=>
"https://www.google.com/accounts/o8/id?id=AItOawnQmfdfsdfsdfdsfsdhGWmuLTiX2Id40k",
"provider"=>"google_apps"}
मेरे उपयोगकर्ता मॉडल में
def apply_omniauth(omniauth)
#add some info about the user
self.email = omniauth['user_info']['email'] if email.blank?
self.name = omniauth['user_info']['name'] if name.blank?
self.name = omniauth['user_info'][:name] if name.blank?
self.nickname = omniauth['user_info']['nickname'] if nickname.blank?
self.nickname = name.gsub(' ','').downcase if nickname.blank?
unless omniauth['credentials'].blank?
user_tokens.build(:provider => omniauth['provider'],
:uid => omniauth['uid'],
:token => omniauth['credentials']['token'],
:secret => omniauth['credentials']['secret'])
else
user_tokens.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
end
end
मैं नहीं कर रहा हूँ पॉप्युलेट करने के लिए कोशिश कर रहा omniauth का उपयोग कर हाल ही में एक त्रुटि थी यूटीएफ एन्कोडिंग के बारे में बेहद जानकार, इसलिए मुझे यकीन नहीं है कि मुझे एन्कोडिंग निर्दिष्ट करना चाहिए? लेकिन मुझे लगता है कि इसे उपयोगकर्ता मॉडल में डालने से पहले यहां बनाया गया है, मुझे यकीन है कि इसके बारे में क्या करना है?
अद्यतन:
रेल 3.0.10 Omniauth 0.2.6 रूबी 1.9.2 पीजी 0.11.0
डिफ़ॉल्ट एन्कोडिंग है UTF-8
यही प्रतीत नहीं किया था यह है, इसलिए मैं आगे खोदा और ध्यान में रखते हुए इस पाया:
Showing /Users/holden/Code/someapp/app/views/users/registrations/_signup.html.erb where line #5 raised:
incompatible character encodings: ASCII-8BIT and UTF-8
Extracted source (around line #5):
2: <%= f.error_messages %>
3:
4: <%= f.input :name, :hint => 'your real name' %>
5: <%= f.input :nickname, :hint => 'Username of your choosing' %>
6:
7: <% unless @user.errors[:email].present? or @user.email %>
8: <%= f.input :email, :as => :hidden %>
अद्यतन अद्यतन:
ऐसा लगता है कि यह सर्वव्यापी मणि है जो एएससीआईआई -8 बीआईटी वर्ण देता है, इसलिए मेरा अगला सवाल यह है कि मैं हैश को कैसे पार्स कर सकता हूं और इसे वापस यूटीएफ 8 में परिवर्तित कर सकता हूं, इसलिए मेरा ऐप विस्फोट नहीं करता है?
session[:omniauth] = omniauth.to_utf8
इस पागल सवारी करने के लिए एक अन्य भाग जब मैं कंसोल
d={"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe", "last_name"=>"Mc\xC3\x99isnean", "name"=>"Joe Mc\xC3\x99isnean"}}
यह स्वचालित रूप से UTF-8 में बदल देता में इस प्रकार है, लेकिन यह जब एक सत्र में shoved फट जाएगा
=> {"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe", "last_name"=>"McÙisnean", "name"=>"Joe McÙisnean"}}
यह एक दर्दनाक दुःस्वप्न है यदि कभी कोई था।
omniauth_controller.rb
session[:omniauth] = omniauth.to_utf8
जोड़ा परिवर्तित मजबूर करने के लिए पुनरावर्ती विधि:
आप रेल, रूबी और omniauth के अपने संस्करण डाल सकते हैं? –
आप स्ट्रिंग के वर्ण एन्कोडिंग को 'string.encoding.name' के साथ भी देख सकते हैं। –
किया गया। मैंने अपने प्रश्न के संस्करणों को जोड़ा, और एक रिकॉर्डिंग रिकॉर्ड का एन्कोडिंग.नाम "यूटीएफ -8" – holden