Rails Omniauth и UTF-8 Ошибки

У меня была недавняя ошибка, используя Omniauth, пытаясь заполнить некоторые поля из логина Google

, кодируя :: CompatibilityError: несовместимые кодировки символов: ASCII-8bit и UTF-8

"omniauth"=>
  {"user_info"=>
    {"name"=>"Joe McÙisnean",
     "last_name"=>"McÙisnean",
     "first_name"=>"Joe",
     "email"=>"someemail@gmail.com"},
   "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

Я не очень осведомлен о кодировке UTF, поэтому я не уверен, где я должен указывать кодировку? Но я предполагаю, что здесь, прежде чем он получит вставку в пользовательскую модель и создал, я не уверен, что с этим поделать?

Обновление:

Rails 3.0.10 Omniauth 0.2.6. Ruby 1.9.2 PG 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 %>

Обновление обновления:

, кажется, GEM OMNIAUTH, которая возвращает ASCII-8bit Chars, поэтому мой следующий вопрос в том, как я могу разбирать хеш и преобразовать его обратно в UTF8, чтобы мое приложение не взорвалось?

сеанс [: OMNIAUTH] = OMNIAUTH.TO__UTF8

Другая частью этой безумной езды - это когда я ввожу это в консоль

d={"user_info"=>{"email"=>"someemail@gmail.com", "first_name"=>"Joe", "last_name"=>"Mc\xC3\x99isnean", "name"=>"Joe Mc\xC3\x99isnean"}}

, он автоматически преобразует его в UTF-8, но он взрывается при выключении в сеанс

 => {"user_info"=>{"email"=>"someemail@gmail.com", "first_name"=>"Joe", "last_name"=>"McÙisnean", "name"=>"Joe McÙisnean"}} 

Это болезненный кошмар, если бы когда-либо был один.

7
задан holden 12 September 2011 в 17:24
поделиться