Rails 会话存储和 UTF8
我遇到了涉及 Rails 会话存储和 UTF8 的问题。看来当我将 Omniauth 中的一些变量保存到会话中时,我会得到 ASCII-8BIT。
我在 applications.rb 文件中设置了 UTF8,并且 UFT8 在其他地方都可以正常工作。
application.rb
config.encoding = "utf-8"
session_store.rb
Wombieapp::Application.config.session_store :cookie_store, :key => '_wombieapp_session'
在野外
last_name.encoding.name
"UTF-8"
使用 Rails 3.0.10。
从会话返回 ASCII-8BIT
omniauth: {"provider"=>"google_apps", "uid"=>"https://www.google.com/accounts/o8/id?
id=AItOawlx217kz5Tkid0sq5_jIzHGQKupMDI6COc",
"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe",
"last_name"=>"Mc\xC3\x99isnean", "name"=>"Joe Mc\xC3\x99isnean"}}
应该是(会话前的原始):
"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"}
gemfile
#core
gem 'rails', '3.0.10'
gem 'pg', '0.11.0'
gem 'simple_form'
gem 'client_side_validations'
#authorization
#gem 'devise', '1.4.2'
gem 'devise', '1.2'
gem 'omniauth', '0.2.6'
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'rails-3.0'
#heroku
gem 'heroku'
gem 'redcarpet'
gem 'resque', '~> 1.17.1', :require => 'resque/server'
gem 'resque-meta', '1.0.3'
gem 'resque-async_deliver'
gem 'resque-heroku-autoscaler', '~> 0.2.3'
还尝试将编码添加到environment.rbenvironment.rb
我
Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
# Initialize the rails application
Wombieapp::Application.initialize!
也尝试手动将其粘贴在会话中
session[:omniauth] = {"user_info"=> {"name"=>"Joe McÙisnean", "last_name"=>"McÙisnean", "first_name"=>"Joe", "email"=>"[email protected]"}}
并收到 ASCII 错误
SyntaxError in Users::OmniauthCallbacksController#google_apps
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: invalid multibyte char (US-ASCII)
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: invalid multibyte char (US-ASCII)
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: syntax error, unexpected $end, expecting '}'
...user_info"=> {"name"=>"Joe McÙisnean", "last_name"=>"McÙis..
I'm having a problem involving rails session store and UTF8. It seems when I save some variable from Omniauth into my session I get ASCII-8BIT afterwards.
I have UTF8 set in my applications.rb file and UFT8 works fine everywhere else.
application.rb
config.encoding = "utf-8"
session_store.rb
Wombieapp::Application.config.session_store :cookie_store, :key => '_wombieapp_session'
in the wild
last_name.encoding.name
"UTF-8"
Using Rails 3.0.10.
Returning ASCII-8BIT from session
omniauth: {"provider"=>"google_apps", "uid"=>"https://www.google.com/accounts/o8/id?
id=AItOawlx217kz5Tkid0sq5_jIzHGQKupMDI6COc",
"user_info"=>{"email"=>"[email protected]", "first_name"=>"Joe",
"last_name"=>"Mc\xC3\x99isnean", "name"=>"Joe Mc\xC3\x99isnean"}}
Should be (original before session):
"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"}
gemfile
#core
gem 'rails', '3.0.10'
gem 'pg', '0.11.0'
gem 'simple_form'
gem 'client_side_validations'
#authorization
#gem 'devise', '1.4.2'
gem 'devise', '1.2'
gem 'omniauth', '0.2.6'
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'rails-3.0'
#heroku
gem 'heroku'
gem 'redcarpet'
gem 'resque', '~> 1.17.1', :require => 'resque/server'
gem 'resque-meta', '1.0.3'
gem 'resque-async_deliver'
gem 'resque-heroku-autoscaler', '~> 0.2.3'
Also tried adding Encoding to environment.rb
environment.rb
Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
# Initialize the rails application
Wombieapp::Application.initialize!
I also tried sticking it in the session manually
session[:omniauth] = {"user_info"=> {"name"=>"Joe McÙisnean", "last_name"=>"McÙisnean", "first_name"=>"Joe", "email"=>"[email protected]"}}
and got a ASCII error
SyntaxError in Users::OmniauthCallbacksController#google_apps
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: invalid multibyte char (US-ASCII)
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: invalid multibyte char (US-ASCII)
/Users/holden/Code/wombie/app/controllers/users/omniauth_callbacks_controller.rb:30: syntax error, unexpected $end, expecting '}'
...user_info"=> {"name"=>"Joe McÙisnean", "last_name"=>"McÙis..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论