web-dev-qa-db-ja.com

Ruby 1.9.3のデフォルトとしてUTF-8を設定します

Rails 4 and Ruby 1.9.3

私は「奇妙な」文字を頻繁に使用するため、すべての.rbファイルの先頭でUTF-8エンコードを宣言する必要があります。

Ruby 1.9.3のデフォルトのエンコーディングとしてUTF-8を設定する方法はありますか?


すべての回答を試しましたが、rake db:seedを実行し、属性にUS-ASCII以外の有効な文字が含まれるオブジェクトを作成しても、次のエラーが発生します。

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

ソースエンコーディング(つまり、実際に記述されたソースコードが含まれているエンコーディング)を変更するには、現在マジックコメントを使用する必要があります。

# encoding: utf-8

内部エンコーディング(変換後の内部文字列表現のエンコーディング)または外部エンコーディング(読み取りファイルの想定エンコーディング)を設定するだけでは不十分です。実際には、ソースエンコーディングを設定するために、ファイルの先頭にマジックエンコーディングコメントを設定する必要があります。

ChiliProject には rake task があり、リリース前にすべてのファイルに正しいエンコーディングヘッダーを自動的に設定します。

エンコードのデフォルトについて:

  • Ruby 1.8以前は、文字列エンコーディングの概念をまったく知りませんでした。文字列は多かれ少なかれバイト配列でした。
  • Ruby 1.9:デフォルトの文字列エンコーディングはUS_ASCII どこにでも。
  • Ruby 2.0以降:デフォルトの文字列エンコーディングはUTF-8

したがって、Ruby 2.0を使用する場合は、エンコーディングコメントをスキップして、デフォルトであらゆる場所でUTF-8エンコーディングを正しく想定できます。

19
Holger Just

状況に応じて、次のいずれかが必要になると思います。

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

この設定は、environment.rbファイルで行われます。

8
Sean Larkin

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
6
Зелёный

あなたのapplication.rb

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

これはHolgerによって指摘されたすべての話ではありません。詳細については、これをチェックしてください question

2
davegson