2013-12-11 23 views
10

我在軌道4和Ruby 1.9.3設置UTF-8作爲默認爲Ruby 1.9.3

我用「奇怪」的角色,很多時候,所以我必須在頂部聲明UTF-8編碼的所有.rb文件。

有什麼辦法可以將UTF-8設置爲Ruby 1.9.3的默認編碼嗎?


我嘗試了所有的答案,但運行rake db:seed和創建一個對象,其屬性包含非US-ASCII有效字符的時候,我還收到此錯誤:

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

在每個文件的開頭聲明缺省代碼頁爲'utf-8'時,直接在同一個.rb文件中使用unicode字符時。哪個問題導致你的問題?默認情況下,'UTF-8'cp在'ruby 1.9.x'中設置。你有沒有非UTF代碼頁的字符串? –

+0

「'UTF-8'cp在默認情況下是在Ruby 1.9.x中設置的。」這不是真的 –

回答

15

要更改源編碼(即,編碼

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

和 實際寫入酸CE代碼是),你必須使用靈符評論:

# encoding: utf-8 

這是不夠的,要麼設置內部編碼(轉換後的內部字符串表示的編碼)或外部編碼(假設讀取文件的編碼)。您實際上必須在文件頂部設置魔術編碼註釋以設置源編碼。

ChiliProject我們有一個rake task它在發佈之前自動在所有文件中設置正確的編碼標題。

至於編碼的默認值:

  • 紅寶石1.8及以下不知道在所有的字符串編碼的概念。字符串或多或少是字節數組。
  • Ruby 1.9:默認字符串編碼是US_ASCII無處不在。
  • Ruby 2.0及以上版本:默認字符串編碼爲UTF-8

因此,如果您使用Ruby 2.0,則可以跳過編碼註釋,並在默認情況下正確假設UTF-8編碼。

2

在你application.rb中

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

這不是Holger指出的全部內容,請查看question作進一步解釋。

+0

這隻定義了內部編碼(轉換後的內部字符串表示)和外部編碼(讀取文件的默認編碼),但沒有定義ruby源文件的編碼。這隻能通過源文件頂部的魔術註釋來更改。 –

4

我認爲你會想要下列之一,取決於上下文。

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

此設置在environment.rb文件中進行。

+1

這隻定義了內部編碼(轉換後的內部字符串表示)和外部編碼(讀取文件的默認編碼),但沒有定義ruby源文件的編碼。這隻能通過源文件頂部的魔術註釋來更改。 –

6

in Ruby 1.9 the default is ASCII

in Ruby 2.0 the default is UTF-8.


變化紅寶石版本在database.yml

development: 
    adapter: your_db 
    host:  localhost 
    encoding: utf8 
+0

最後一個代碼塊應該放在哪個文件中? 'database.yml'中的 –

+0

只是一個推薦,並不一定 –