Kernel#sprintf
Rubyのメソッドについて混乱が生じています。
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}"
マジック コメントを使用してエンコーディングをバイナリ (ascii-8bit) に設定すると、エラーが発生します。
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でもこれを試したので、1.9.3に固有のものではないようです。
多分私は何か間違ったことをしていますか?私はそのKernel#sprintf
方法にあまり詳しくありません。
githubにある ruby-smpp という smpp ライブラリを使用しています。send_concat_mt
Ruby 1.9.3で実行しようとしたときに動作しているのは、47行目のメソッドです。
どなたかがこの問題に光を当てていただければ幸いです。