在Rails 3中解决无效多字节字符(US-ASCII)的全局设置

时间:2011-04-27 19:22:37

标签: ruby-on-rails-3 configuration character-encoding

我的问题与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"

但是,它没有帮助。

也许,这种情况下会出现另一个全局配置选项吗?

3 个答案:

答案 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

位于每个文件的顶部。