2010-05-04 121 views
1

我有一個Rails應用程序SayControllerhello操作和視圖模板say/hello.html.erb。當我加入一些西里爾字符,如 「ю」,我得到一個錯誤:Ruby On Rails和UTF-8

引發ArgumentError在SayController#你好

invalid byte sequence in UTF-8

頭:

{"Cache-Control"=>"no-cache", 
"X-Runtime"=>"11", 
"Content-Type"=>"text/html; charset=utf-8"} 

如果我嘗試用嵌入式Ruby寫這封信,

<%= "ю" %> 

我沒有得到任何錯誤,但它在黑色方塊( )中顯示問號而不是此字母。

我使用Windows 7 x64,Ruby 1.9.1p378,Rails 2.3.5,WEBrick服務器。

+0

您是否在HTML標題中定義了UTF-8字符集? – shingara 2010-05-04 09:25:18

+0

是的,沒有變化。 – 2010-05-04 09:35:49

回答

2

這個錯誤的一個可能的原因是包含西里爾文字母的文件不是用UTF8編碼,而是可能用一些俄文編碼如KOI8編碼。這將導致字符無法在UTF8中解釋(正確如此!)。

請仔細檢查您的文件是否以UTF8正確編碼。

+0

謝謝,雙重檢查幫助:-)我以爲我已經設置了UTF-8作爲項目的默認編碼IDE preferenses ... – 2010-05-05 10:17:34

1

具有以下內容的下your_app創建一個初始化文件(例如encoding_fix.rb)/配置/初始化:

Encoding.default_internal = Encoding::UTF_8 if RUBY_VERSION > "1.9" 
Encoding.default_external = Encoding::UTF_8 if RUBY_VERSION > "1.9" 

這會將編碼爲UTF8。

+1

我已經完成了你說的,但仍然得到相同的錯誤。正如你可以在「Headers」部分看到的,服務器使用UTF-8發送數據。 – 2010-05-05 10:10:52

+0

這不起作用。 – epochwolf 2010-05-12 00:57:59

+0

我的代碼片段將ruby字符串,即erb標籤內的字符串轉換爲編碼。 erb標籤外部的字符用文件的實際編碼進行解釋。 – phil 2010-05-14 09:13:14