1

Rails 3.2.2
Ruby 1.9.3
我试过的所有浏览器(Aurora、IE、Chrome)
Windows 7

我很享受能够在数据库和客户端之间可靠地来回传递 unicode。据我所知,它完美无缺。

然而,这只会使我遇到的问题更加令人烦恼。在 Rails 中使用包含各种特殊字符的字符串文字时(例如,在为模型定义的方法中),我导致 Webrick 完全失败,并返回 500“我们很抱歉,但发生了一些事情”错误。

例如,假设我有字符串“O₂”。我可以将该值发布到一个表单中,稍后再获取它,一切都很好。但是说我有一个方法

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = 'O₂'
  end
  return fixed_name
end

然后,如果我调用 fix_name,即使案例在没有匹配的情况下失败,服务器也会突然失败(在说它已成功呈现通用 new.html 页面之后)。

此外,如果我切换到直接指定 unicode,如

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\x20\x82"
  end
  return fixed_name
end

我得到通用的“�”字符而不是“₂”。

有没有其他人有这个问题?这里会发生什么?

更新

好的,在对 Unicode 和 UTF-8 进行了更好的教育之后,我能够在这方面少一点尼安德特人。

我发布的代码的修复是

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\xe2\x82\x82"
  end
  return fixed_name
end

或者可能更好:

def fix_name molecule_name 
  fixed_name = molecule_name
  case molecule_name
  when 'O2' then fixed_name = "O\u{2082}"
  end
  return fixed_name
end

因此,正确的字节码是道德的!

但这仍然不能解释为什么我不能输入文字字符。

4

1 回答 1

1

让我们说,Ruby 1.9.3 对 rb 文件中的编码非常“严格”。

http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/

http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings

简短的回答是您应该尝试添加:

# encoding: UTF-8

到您的 .rb 文件的顶部,然后 ruby​​ 1.9.3 不应阻塞代码中的 UTF 字符。

于 2012-05-04T01:50:04.580 回答