Ruby1.8.7+Rails2.1.1→Ruby1.9.1+Rails2.3.2(その2)

昨日の続きを。

7. incompatible character encodings: ASCII-8BIT and UTF-8

  • ASCII-8BIT外の文字を使っているソースの先頭に「#coding: utf-8」をつけた
  • patchをあててみた
  • <%= collection_select … %>で展開される文字がASCII-8BITの外だと「incompatible character encodings: ASCII-8BIT and UTF-8」 ← いまココ

以下のようなエラーがでます。

 Showing app/views/layouts/application.html.erb where line #45 raised:

incompatible character encodings: ASCII-8BIT and UTF-8

Extracted source (around line #45):

42: </div>
43: 
44: <div class="content" id="content">
45:   <%= yield %>
46: </div>
47: 
48: </body>

DB(sqlite3)から取ってきた文字列に対してencodingメソッドを呼び出してみると…

    @categories.each do |c|
      p c.name.encoding 
    end

"ASCII-8BIT"でした。database.ymlのencodingの指定が適用されないらしい。エンコーディングをforce_encodingで変えてやると、エラーは出なくなりました。

    @categories.each do |c|
      p c.name.encoding
      c.name = c.name.force_encoding('utf-8')
    end

sqlite3のアダプタがNGなのかと思い、MySQL + MySQL/Ruby(2.8.1)で試してみましたが、やはり同じエラーになります。2.8.1はRuby1.9.1に対応していると書いてあるのですが、M17Nは未対応なのかな。
Ruby/MySQL 3.0.0 alphaの方曰く、

MySQL/Ruby と比べて遅かったり、非互換があったりしますが、Ruby 1.9 の M17N がちゃんと扱えるのはこれだけなので、Ruby 1.9
な人はこれを使ってみるのもいいと思います。

やはり厳しいみたい。