ruby-on-rails - 由于 cookie 的 8 位编码(Rails 3 和 Ruby 1.9)导致错误 'incompatible character encodings: ASCII-8BIT and UTF-8'

标签 ruby-on-rails ruby ruby-on-rails-3 haml ruby-1.9

我将一个使用 1.8.7 的网络应用程序移到了 1.9.2,现在我一直在使用

incompatible character encodings: ASCII-8BIT and UTF-8

我有 UTF-8 的数据库编码,我还有 'config.encoding = "utf-8"'。

我看到了一些想法作为可能的解决方法并添加了

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

但是也没用。

出现此错误的一段特定代码是

%ul.address
- @user.address.split(',').each do |line|
  %li= line.titleize

我使用的是 HAML,我检查了 line.titleize,编码是 UTF-8。似乎模板是用 ASCII-8BIT 渲染的,每次我尝试渲染像 'ñ' 这样的字符时它都会搞砸

我正在使用 Rails 3.0.5。

我已阅读 James Edward Gray 的帖子,但我仍然可以弄清楚发生了什么;(。

我非常感谢任何形式的帮助 :D。

我也试过:

"string".force_encoding("UTF-8")

# encoding: utf-8

没有任何运气。

固定


查看评论。

最佳答案

我刚刚遇到了类似的事情......并发现隐藏在这个问题的评论中的修复,但认为值得明确强调:

cookie 是 ASCII-8BIT,但 rails 3 模板默认是 utf-8。这意味着在 View 中使用原始 cookie 值可能会引发 Encoding::CompatibilityError(如果用户在 cookie 值中有不兼容)

解决方法(如 Adolfo Builes 所述)是将您的 cookie 值强制转换为 UTF-8,如:

cookies["location"].force_encoding('UTF-8')

关于ruby-on-rails - 由于 cookie 的 8 位编码(Rails 3 和 Ruby 1.9)导致错误 'incompatible character encodings: ASCII-8BIT and UTF-8',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398889/

相关文章:

ruby-on-rails - 如何在页面加载时在我的表单中设置默认值? ( rails )

ruby-on-rails - Ruby on Rails 的授权模型

ruby-on-rails - Google Ruby API 客户端 redirect_uri_mismatch 错误

ruby-on-rails - rake Assets :预编译RAILS_ENV =生产无法按要求进行

jquery - 如何使 Rails 3 表单中的 javascript 不显眼?

html - 为什么 Rails 给我 "Can' t verify CSRF token authenticity”错误?

ruby-on-rails - 测试从命令行运行但不在 RubyMine 中运行 - 未找到测试

ruby-on-rails - 包含相关元素

ruby open-uri打开方法丢失文件扩展名打开图片

ruby-on-rails - Roo 电子表格上传 OLE2 签名无效