RubyのKernel#sprintf
メソッドで混乱が生じています。Ruby sprintfが1.9で動作する
Ruby 1.9は、Ruby 1.8とは異なる方法でエンコードを処理します。
ここで私は後だ結果であり、そしてどのようにそれは、Ruby 1.8で動作します。
>> RUBY_VERSION
=> "1.8.7"
>> sprintf("%c", 88599)
=> "\027"
これはRuby 1.9の中でどのように動作するかです:
1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3"
1.9.3p194 :002 > sprintf("%c", 88599)
=> "\u{15A17}"
私はと魔法のコメントを使用している場合
1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3"
1.9.3p194 :002 > # encoding: binary
1.9.3p194 :003 > sprintf("%c", 88599)
RangeError: 88599 out of char range
from (irb):3:in `sprintf'
from (irb):3
from /Users/lisinge/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
私もRubyの1.9.2ので、目でこれを試してみました:私はエラーを取得するバイナリ(アスキー-8ビット)へのエンコーディングを設定します1.9.3に固有のようではありません。
多分私は何か間違っていますか?私はKernel#sprintf
メソッドにあまり慣れていません。
私はgithubにあるruby-smppというsmppライブラリを使用しています。私がRuby 1.9.3で実行しようとしているときに動いているのは、#47行目のsend_concat_mt
メソッドです。
あなたの誰かがこの問題について明らかにしていただければ幸いです。
おそらく、Unicodeをサポートし始めるでしょう。私はあなたが 'sprintf'のこの"機能 "に頼るべきではないと思います。 – nhahtdh
ええ、私は私の例でそれを見ることができます。 そして、私はruby stdlibのメソッドに頼るべきであるという厚さはありません。そのドキュメントは両方のバージョンで同じことを言っていますか? 私は私の質問で言っているように、私は何か間違っているようです – Lisinge