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
因此,正确的字节码是道德的!
但这仍然不能解释为什么我不能输入文字字符。