Rails 会话存储和 UTF8

发布于 2024-12-04 06:53:36 字数 3024 浏览 2 评论 0原文

我遇到了涉及 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文