将UTF-8设置为Ruby 1.9.3的默认值

时间:2013-12-11 14:11:19

标签: ruby encoding utf-8 ruby-on-rails-4 ruby-1.9.3

我正在使用Rails 4和Ruby 1.9.3

我经常使用“奇怪”字符,所以我必须在所有.rb文件的顶部声明UTF-8编码。

有没有办法将UTF-8设置为Ruby 1.9.3的默认编码?


我尝试了所有答案,但在运行rake db:seed并创建属性包含非US-ASCII个有效字符的对象时,我仍然收到此错误:

`block in trace_on': invalid byte sequence in US-ASCII (ArgumentError)

4 个答案:

答案 0 :(得分:16)

要更改源编码(即您实际编写的源代码所在的编码),您必须使用当前的魔术注释:

# encoding: utf-8

仅设置内部编码(转换后内部字符串表示的编码)或外部编码(读取文件的假定编码)是不够的。实际上,您必须在文件顶部设置魔术编码注释以设置源编码。

ChiliProject中,我们有一个rake task,可以在发布之前自动在所有文件中设置正确的编码标头。

至于编码默认值:

  • Ruby 1.8及以下版本根本不知道字符串编码的概念。字符串或多或少是字节数组。
  • Ruby 1.9:默认字符串编码无处不在US_ASCII
  • Ruby 2.0及以上版本:默认字符串编码为UTF-8

因此,如果您使用Ruby 2.0,则可以跳过编码注释,并在默认情况下正确地假设UTF-8编码。

答案 1 :(得分:6)

我认为您需要以下其中一项,具体取决于具体情况。

Encoding.default_internal = Encoding::UTF_8
Encoding.default_external = Encoding::UTF_8

此设置在environment.rb文件中进行。

答案 2 :(得分:6)

  Ruby 1.9中的

默认为ASCII

     

在Ruby 2.0中,默认值为UTF-8。


改变Ruby版本

config.encoding = "utf-8" # application.rb

和 在database.yml

development:
     adapter:  your_db
     host:     localhost
     encoding: utf8

答案 3 :(得分:2)

application.rb

# Configure the default encoding used in templates for Ruby
config.encoding = "utf-8"

这不是Holger指出的整个故事,请查看question以获得进一步的解释。