2012-03-14 11 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の間で変更されました。 –

+0

はい、それは 'Ruby 1.9.2p290'です – steveyang

答えて

0

あなたがRailsのを使用している場合、あなたはapplication.rbで、デフォルトのエンコーディングを設定していますか? like:

config.encoding = "utf-8" 

My Rails(3.2.1)プロジェクトには、それ以外の設定はありません。

あなたがチェックしたいことは、データファイルが本当にUTF-8であるかどうかです。

+0

私はRailsを使用していません。私は一般的にerbを使用していました:) – steveyang

+0

別の答えを書くつもり:) – shigeya

0

:あなたはUnixライクなシステムを使用している場合、あなたはで、コードをチェックするために「NKF」コマンドを使用することができます 答え)

2つの問題だと思います。入力

    • データファイルのエンコーディングERBライブラリは魔法のコメントでエンコーディングの指定が、データファイルの一部を知っているどのように出力

    、自分で世話をする必要があります。したがって、ファイルを読むときは、エンコーディングを指定するか、あらかじめデフォルトのエンコーディングを指定する必要があります。

    出力時に出力するエンコードを指定する必要があります。 I/Oチャネルごとに指定できます。 (最も簡単な)デフォルトのエンコーディングを指定するには

    、次のことができます。

    Encoding.default_external = "UTF-8" 
    

    すべてのI/O用のUTF-8を使用します。

  • +0

    あなたは、ソースファイルに間違ったファイルエンコーディングを使ってRoRによって投げられたサーバー側の例外を混乱させ、クライアント(ブラウザ)テキストエンコーディングは –

    4

    (私は違う書くことにしたテンプレートのヘッダに<meta http-equiv="content-type" content="text/html;charset=UTF-8" />を指定

    nkf --guess FILE_NAME