[ruby-list:45954] 質問:sprintfのEncoding::CompatibilityErrorについて
From:
Dice <rubyist@...>
Date:
2009-04-13 00:08:56 UTC
List:
ruby-list #45954
Diceです。
ruby 1.9.1 でのsprintfについて、ひとつ質問させてください。
次のようなスクリプトをファイルに保存して
--------
# encoding: utf-8
a = 'Please open
the"secretb14a7b8059d9c055954c9674ce60032magicb14a7b8059d9c055954c92674ce60032box".'.encode('us-ascii')
b = '日本語'
p a.encoding # => #<Encoding:US-ASCII>
p b.encoding # => #<Encoding:UTF-8>
tmpl = "<pre><code>%s\n</code></pre>%s".encode('us-ascii')
p tmpl.encoding # => #<Encoding:US-ASCII>
re = sprintf(tmpl, a, b)
--------
このスクリプトをrubyで実行すると、最後のsprintfで以下のような例外になります。
--------
*.rb:11:in `sprintf': incompatible character encodings: US-ASCII and
UTF-8 (Encoding::CompatibilityError)
--------
最初は単純なミスがあるのだと思って探してみたのですが
どうもそうではなく、ある特定の文字列のときのみ例外が起こっているようです。
たとえば、tmplを以下のように書き換えただけでも、この例外は起こらなくなります。
tmpl = "<pre><code>%s</code></pre>%s".encode('us-ascii')
tmpl = "%s\n%s".encode('us-ascii')
この例外はなぜ発生しているのでしょうか?
原因がお分かりになる方がおられましたら、教えていただけないでしょうか。
なお、環境は ruby 1.9.1 (2009-01-30 revision 21907) [i386-mswin32] です。
--------------------------------
Dice
tetradice+ruby@gmail.com