2012-03-14 62 views
2

我有一個以utf-8編碼存儲的數據文件,我想將數據嵌入到erb模板中。數據文件在頂部用utf-8顯式編碼。但是,雖然運行erb引擎,但我遇到Encoding::CompatibilityError錯誤。如何在erb模板中使用utf-8編碼的數據

我認爲Ruby中的默認編碼是ASCII,erb模板也必須在ascii下編碼。我明確地將其改爲utf-8,但沒有好處。

下面是數據文件:

# coding: utf-8 

samples: [ 
    { name: '北京', city: '北京' } 
] 

下面是僱員再培訓局模板:

<% # -*- coding: UTF-8 -*- %> 
#... 
<p><%= samples[:name] %></p> 
+0

我只想確認這是在Ruby 1.9上,對嗎?編碼行爲在1.8和1.9之間變化。 – 2012-03-14 06:14:07

+0

是的,它是'Ruby 1.9.2p290' – steveyang 2012-03-15 07:58:14

回答

0

如果您使用Rails的,你有沒有配置的默認編碼,在application.rb?像:

config.encoding = "utf-8" 

我的Rails(3.2.1)項目不包含任何配置以外的其他配置。

你想要檢查的其他事情是,無論你的數據文件是否真的在UTF-8中。 如果你使用Unix系統,你可以使用「NKF」命令來檢查代碼,通過:

nkf --guess FILE_NAME 
+0

我沒有使用Rails。我在一般情況下使用erb :) – steveyang 2012-03-14 04:24:49

+0

要寫另一個答案:) – shigeya 2012-03-14 05:42:50

0

在模板的標題指定<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

+0

我認爲你混淆了由RoR引發的服務器端異常使用源文件的錯誤文件編碼,並告訴客戶端(瀏覽器)該文件是什麼文本編碼是 – 2013-04-04 11:09:41

4

(我決定寫不同回答)

兩個問題,我想。輸入

    • 數據文件的編碼如何輸出

    該局庫知道在魔術註釋的編碼規範,但數據文件的一部分,你需要自己打理。所以,當你讀取文件時,你必須指定編碼,或者事先指定默認編碼。

    在輸出上,您需要指定輸出的編碼。您可以指定每個I/O通道的基礎。

    要指定缺省編碼(最簡單的),您可以:

    Encoding.default_external = "UTF-8" 
    

    使用UTF-8進行所有的I/O。