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

Fel*_*ger 13 ruby encoding utf-8 ruby-1.9.3 ruby-on-rails-4

我在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)
Run Code Online (Sandbox Code Playgroud)

Hol*_*ust 19

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

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

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

ChiliProject中,我们有一个rake任务,它在发布之前自动在所有文件中设置正确的编码头.

至于编码默认值:

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

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


Sea*_*kin 7

我想你会想要以下其中一种,具体取决于上下文.

Encoding.default_internal = Encoding::UTF_8
Encoding.default_external = Encoding::UTF_8
Run Code Online (Sandbox Code Playgroud)

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

  • 这仅定义了内部编码(转换后的内部字符串表示形式)和外部编码(读取文件的默认编码),但未定义ruby源文件的编码。只能使用源文件顶部的魔术注释来更改此设置。 (2认同)

Зел*_*ный 6

在Ruby 1.9中,默认为ASCII

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


改变Ruby版本

要么

config.encoding = "utf-8" # application.rb
Run Code Online (Sandbox Code Playgroud)

在你的 database.yml

development:
     adapter:  your_db
     host:     localhost
     encoding: utf8
Run Code Online (Sandbox Code Playgroud)