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 な人はこれを使ってみるのもいいと思います。
やはり厳しいみたい。