Rails 2.3.2 / Ruby 1.8.6编码问题 – ActionController返回UTF-8?

我有一个非常简单的关于编码的Rails问题,我无法找到答案。

环境:Rails 2.3.2 / Ruby1.8.6

我目前没有在Rails环境中设置任何编码选项,已将所有内容保留为默认值。

如果我从文本文件中读取磁盘中的字符串 – 并使用Apache / Phusion通过Rails渲染:文本function发送它,客户端应该使用什么编码?

谢谢你的任何答案,

自从关于Rails 1.2以来,Rails将Ruby 1.8的$ KCODE魔术变量设置为“UTF8”。 它包括ActiveSupport :: CoreExtensions :: String :: Multibyte,以修复其他模糊的每字符/每字节运算符的问题。 你的文本文件应该是UTF-8,Ruby会传递它,你的应用程序布局应该指定一个META标记,声明文档的字符集也是UTF-8:

 

然后它应该都“正常工作”,但下面描述了一些问题。

如果你在Mac上,在Terminal.app中运行“脚本/控制台”,然后将不常见的字符序列直接粘贴到终端,例如字符查看器,这是一种很好的方式,可以让你自己满意地演示并certificate这一点,因为整个操作系统在UTF-8中工作。 我不知道Windows或任意Linux发行版的等价物是什么。

例如,“⇒” – RIGHTWARDS DOUBLE ARROW – 是Unicode 21D2,UTF8 0xE2(226),0x87(125),0x92(146)。 如果我将其粘贴到终端并询问字节值,我得到预期的结果:

 >> $KCODE => "UTF8" >> "⇒" => "\342\207\222" >> puts "⇒" ⇒ 

…但…

 >> "⇒"[0] => 226 >> "⇒"[1] => 135 >> "⇒"[2] => 146 >> "⇒"[3] => nil 

请注意您仍然使用“[]”获取字节访问权限。 如果你想进行字符串操作,请参阅Rails API中的多字节扩展文档(适用于Rails 2.2,例如http://railsapi.com/ ),否则像“foo.reverse”这样的东西会做错事; “foo.mb_chars.reverse”通过使用“mb_chars”代理使其正确。