【发布时间】:2010-01-19 03:24:22
【问题描述】:
升级到 ruby 1.9 后,我们开始注意到当用户使用非 ASCII 字符时,页面无法从 rails 模板渲染器渲染。特别是“é”。我能够在我们的一台暂存服务器上解决此问题,但我无法在我们的生产服务器上重现此修复。
第一次似乎有效的修复:
使用此处提供的 convert_charset 工具将数据库从 latin1 转换为 utf8:http://www.mysqlperformanceblog.com/2009/03/17/converting-character-sets/。 (包括在my.cnf中设置
default_character_set=utf8并运行SET GLOBAL character_set_server=utf8切换到 sam-mysql-ruby 适配器(而不是标准的 mysql 适配器:http://gemcutter.org/gems/sam-mysql-ruby)
重新启动的轨道
错误是:
"invalid byte sequence in US-ASCII"
奇怪的是,按照上述步骤操作后,我们的生产服务器上的错误并没有改变。在 database.yml 中设置encoding: utf8 也不会改变错误。
以下代码行引发的错误:
<%= link_to h(question.title), question_path(question) %>
这个博客似乎提出了一个修复建议,但它提到这在 1.9 中不应该是一个问题:http://www.igvita.com/2007/04/11/secure-utf-8-input-in-rails/(它已经超过 2 年了)。
我想随着越来越多的 Rails 开发人员转向 1.9,这个问题可能很快就会影响到很多人。
【问题讨论】:
标签: ruby-on-rails ruby utf-8 character-encoding ruby-1.9