簡體   English   中英

Rails 2.3.2 / Ruby 1.8.6編碼問題-ActionController返回UTF-8嗎?

[英]Rails 2.3.2/Ruby 1.8.6 Encoding Question - ActionController returning UTF-8?

我有一個關於編碼的非常簡單的Rails問題,我找不到答案。

環境:Rails 2.3.2 / Ruby1.8.6

我目前未在Rails環境中設置任何編碼選項,將所有內容保留為默認值。

如果我從磁盤上從文本文件中讀取一個字符串,然后使用Apache / Phusion通過Rails render:text功能發送它,那么客戶端應該期望哪種編碼?

謝謝您的回答,

從Rails 1.2開始,Rails將Ruby 1.8的$ KCODE魔術變量設置為“ UTF8”。 它包括ActiveSupport :: CoreExtensions :: String :: Multibyte,用於解決按字符/按字節運算符不明確的問題。 您的文本文件應為UTF-8,Ruby將通過它,並且您的應用程序布局應指定一個META標記,也將文檔的字符集也聲明為UTF-8:

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

然后一切都應該“正常工作”,但是下面描述了一些陷阱。

如果您使用的是Mac,請在Terminal.app中運行“腳本/控制台”,然后從“角色查看器”直接將異常字符序列直接粘貼到終端中,這是一個很好的方法,可以演示並讓您自己滿意,因為整個操作系統都可以在UTF-8中運行。 我不知道Windows或任意Linux發行版的等效性。

例如,“⇒”-RIGHTWARDS DOUBLE ARROW-是Unicode 21D2,UTF8 0xE2(226),0x87(125),0x92(146)。 如果我將其粘貼到Terminal中並詢問字節值,我將得到預期的結果:

>> $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”代理來正確處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM