que tuve un error de reciente utilizando OmniAuth tratando de llenar algunos campos de inicio de sesión de Googlerieles OmniAuth y UTF-8 errores
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"}
En mi modelo de usuario
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
no estoy muy conocedor de la codificación UTF, ¿así que no estoy seguro de dónde debería especificar la codificación? Pero supongo que está aquí antes de que se ponga en el modelo de usuario y se cree, ¿no estoy seguro de qué hacer al respecto?
ACTUALIZACIÓN:
rieles 3.0.10 OmniAuth 0.2.6 de Ruby 1.9.2 PG 0.11.0
codificación predeterminada es UTF-8
que no parecían estar él, así que cavó más lejos y encontró esto en la vista:
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 %>
ACTUALIZACIÓN ACTUALIZACIÓN:
Parece ser la joya omniauth que devuelve los caracteres ASCII-8BIT, por lo que mi siguiente pregunta es ¿cómo puedo analizar el hash y convertirlo de nuevo en UTF8 para que mi aplicación no explote?
session[:omniauth] = omniauth.to_utf8
Otra parte de este viaje loco es cuando escribo esto en la consola
d={"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe", "last_name"=>"Mc\xC3\x99isnean", "name"=>"Joe Mc\xC3\x99isnean"}}
Se convierte automáticamente en UTF-8, pero explota cuando se metió en una sesión
=> {"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe", "last_name"=>"McÙisnean", "name"=>"Joe McÙisnean"}}
Esta es una pesadilla dolorosa si alguna vez hubo una.
Podría poner sus versiones de los carriles, rubí y OmniAuth? –
También puede verificar la codificación de caracteres de una cadena con 'string.encoding.name'. –
hecho. Agregué las versiones a mi pregunta, y el nombre de codificación de un registro de trabajo es "UTF-8" – holden