Mam pewne zamieszanie na metodzie Kernel#sprintf
w Ruby.Ruby sprintf działające w 1.9
Ruby 1.9 obsługuje kodowanie w inny sposób niż Ruby 1.8.
Oto wyniki jestem po, i jak się zachowuje w Ruby 1.8:
>> RUBY_VERSION
=> "1.8.7"
>> sprintf("%c", 88599)
=> "\027"
W ten sposób zachowuje się w Ruby 1.9:
1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3"
1.9.3p194 :002 > sprintf("%c", 88599)
=> "\u{15A17}"
Jeśli użyję magicznego komentarz ustawić kodowanie na binarny (aSCII-8bit) pojawia się błąd:
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>'
próbowałem również ten z Ruby 1.9.2 tak th Wydaje się, że nie jest on specyficzny dla wersji 1.9.3.
Może robię coś nie tak? Nie jestem zaznajomiony z metodą Kernel#sprintf
.
Używam biblioteki smpp o nazwie ruby-smpp, którą można znaleźć pod adresem github. Jest to metoda send_concat_mt
na linii # 47, która działa, gdy próbuję uruchomić ją w Rubim 1.9.3.
Byłbym bardzo wdzięczny, gdyby któryś z was mógł rzucić trochę światła na tę sprawę.
Prawdopodobnie zaczyna obsługiwać Unicode, stąd zachowanie. Nie sądzę, że powinieneś polegać na tej "funkcji" programu 'sprintf'. – nhahtdh
Tak, widzimy to w moich przykładach. A ty nie gruby, że powinienem polegać na metodzie w ruby stdlib której dokumentacji mówi to samo w obu wersjach? Jak mówię w moim pytaniu, wygląda na to, że robię coś źle – Lisinge