From: Yutaka Kanemoto Date: 2009-08-12T00:25:59+09:00 Subject: [ruby-list:46274] % でのフォーマット 金本と申します。 お世話になります。 以下のようなスクリプトを走らせると、 1.9.1p0とtrunkで結果に差があります。 >---ここから---< # coding: utf-8 fmt="%s テスト%s" p fmt.encoding a=["abc", "です。"] a.each {|e| print e, ": ", e.encoding, "\n" } puts fmt % a puts "----" a[0].encode!("US-ASCII") a.each {|e| print e, ": ", e.encoding, "\n" } p Encoding.compatible?(a[0], fmt) p Encoding.compatible?(a[1], fmt) p Encoding.compatible?(a[0], a[1]) puts fmt % a >---ここまで---< >---ここから1.9.1p0---< ruby 1.9.1p0 (2009-01-30 revision 21907) [x86_64-linux] # abc: UTF-8 です。: UTF-8 abc テストです。 ---- abc: US-ASCII です。: UTF-8 # # # abc テストです。 >---ここまで1.9.1p0---< >---ここからtrunk---< ruby 1.9.2dev (2009-08-11 trunk 24495) [x86_64-linux] # abc: UTF-8 です。: UTF-8 abc テストです。 ---- abc: US-ASCII です。: UTF-8 # # # 19:in `%': incompatible character encodings: US-ASCII and UTF-8 (Encoding::CompatibilityError) from enctest.rb:19:in `
' >---ここまでtrunk---< いまいち見づらくてどうもすみません。 1.9.1p243も結果はtrunkといっしょでした。 仕様変更やBugFixがあったかなにかで、こういう場合は%する前に、 encodingをそろえたほうがいいのでしょうか? 何か私がEncodingについて理解していなくて勘違いしているのかもしれませんが、 compatible?はEncodingが返ってきているので、compatibleなきがするのですが、 CompatibilityErrorになってしまうのがよくわかりませんでした。 Redmineにあげたほうがよろしいでしょうか? よろしくお願いいたします。 -- Yutaka KANEMOTO http://d.hatena.ne.jp/kinpoco/