我的问题与Rails 3 invalid multibyte char (US-ASCII)
相似解决方案,在那里提供确实有效,但我发现这有点愚蠢,将#encoding:UTF-8 添加到每个使用非ASCII字符的文件中。
在config / application.rb中,我有以下选项:
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"
但是,它没有帮助。
也许,这种情况下会出现另一个全局配置选项吗?
答案 0 :(得分:2)
没有办法默认Ruby 1.9对所有源文件使用UTF-8(是的,它是一个巨大的PITA)。
config.encoding
设置告诉Rails一些东西,与Ruby无关。
最好的解决方案我想出来的东西依赖于我没见过的东西。还有另一种方法可以让Ruby 1.9将文件视为UTF-8,使用该魔术注释的instad可以在文件中包含UTF-8 BOM (Byte Order Marker)。 Ruby 1.9会做正确的事。
现在很酷的部分 - 我使用gvim,实际上非常简单的配置gvim将BOM放入每个应该有一个文件的文件中。这就像将其添加到我的.vimrc
:
set bomb
不确定您是否使用gvim,或者其他编辑是否可以执行此操作。显然YMMV:)
答案 1 :(得分:1)
您可以在运行应用程序时设置环境变量RUBYOPT=-Ku
,它将使ruby(甚至1.9)假定所有.rb
源文件的utf-8编码。
对于rails应用程序,我宁愿建议不要使用该技巧,而是将非ascii部分放在i18n文件中并通过I18n.t
引用它们。
如果您已经启动并运行了应用程序,那么设置起来会有点繁琐,但如果您需要将其翻译成另一种语言,那么您已经在那里了。
答案 2 :(得分:-1)
如果您实际上直接在模板中编码多字节字符,则可以在application.rb文件中进行设置。
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
这相当于推杆:
# encoding: UTF-8
位于每个文件的顶部。