Estoy experimentando cierta confusión en el método Kernel#sprintf
en Ruby.Ruby sprintf actuando en 1.9
Ruby 1.9 maneja la codificación de una manera diferente a la de Ruby 1.8.
Estos son los resultados que busco, y cómo se comporta en Ruby 1.8:
>> RUBY_VERSION
=> "1.8.7"
>> sprintf("%c", 88599)
=> "\027"
Ésta es la forma en que se comporta de Ruby 1.9:
1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3"
1.9.3p194 :002 > sprintf("%c", 88599)
=> "\u{15A17}"
Si utilizo el comentario mágica para establecer la codificación en binario (ascii-8 bits) me aparece un error:
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>'
también he intentado esto con Ruby 1.9.2 por lo º No parece ser específico de 1.9.3.
¿Tal vez estoy haciendo algo mal? No estoy tan familiarizado con el método Kernel#sprintf
.
Estoy usando una biblioteca smpp llamada ruby-smpp que se puede encontrar en github. Es el método send_concat_mt
en la línea # 47 que está actuando cuando estoy tratando de ejecutarlo en Ruby 1.9.3.
Agradecería mucho que alguno de ustedes pudiera arrojar algo de luz sobre este asunto.
Probablemente comience a soportar Unicode, de ahí el comportamiento. No creo que deba confiar en esta "característica" de 'sprintf'. – nhahtdh
Sí, podemos ver eso en mis ejemplos. Y no esperas que debería confiar en un método en ruby stdlib cuya documentación dice lo mismo en ambas versiones? Como digo en mi pregunta, parece que estoy haciendo algo mal – Lisinge