2011-02-16 20 views
1

我有一個非常簡單的Rails關於編碼的問題,我找不到答案。Rails 2.3.2/Ruby 1.8.6編碼問題 - ActionController返回UTF-8?

環境: 線路2.3.2/Ruby1.8.6

我沒有設定目前Rails環境中的任何編碼選項,都留下一切爲默認值。

如果我從文本文件從磁盤讀取字符串 - 並通過Rails render:使用Apache/Phusion發送文本功能,客戶端應該使用哪種編碼?

感謝您的任何答案,

回答

1

由於Rails的1.2,Rails的Ruby的設置1.8的$ KCODE魔術變量 「UTF8」。它包括ActiveSupport :: CoreExtensions :: String :: Multibyte來修補每個字符/每個字節運算符不明確的問題。您的文本文件應該是UTF-8,紅寶石將通過它通過和您的應用程序佈局應指定一個META標籤聲明文檔的字符集是UTF-8太:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

然後,它都應該「只是工作」,但是下面有一些陷阱。

如果您在Mac上,請在Terminal.app中運行「script/console」,然後將不常用的字符序列直接從終端粘貼到終端中。字符瀏覽器是一個很好的方式來演示和演示,以滿足您的需求,因爲整個操作系統都是以UTF-8編碼的。我不知道Windows或任意Linux發行版的等價物會是什麼。例如,「⇒」 - RIGHTWARDS DOUBLE ARROW - 是Unicode 21D2,UTF8 0xE2(226),0x87(125),0x92(146)。如果我粘貼到終端,並要求字節值我得到預期的結果:

>> $KCODE 
=> "UTF8" 
>> "⇒" 
=> "\342\207\222" 
>> puts "⇒" 
⇒ 

...但是...

>> "⇒"[0] 
=> 226 
>> "⇒"[1] 
=> 135 
>> "⇒"[2] 
=> 146 
>> "⇒"[3] 
=> nil 

注意你怎麼還讓與「字節訪問[]」。如果你想進行字符串操作,請參閱Rails API中Multibyte擴展的文檔(對於Rails 2.2,例如http://railsapi.com/),否則像「foo.reverse」這樣的東西會做錯誤的事情; 「foo.mb_chars.reverse」通過使用「mb_chars」代理正確解決問題。