Estoy tratando de convertir algunos caracteres de un solo byte en caracteres de múltiples bytes usando tr
.
Cuando tengo un solo carácter para convertir, la conversión funciona:
"\".tr("\", "\")
# => "\"
pero si agrego algunos caracteres más, los caracteres no se detectan:
"\".tr("\¥"", "\¥’")
# => "\"
¿Por qué es eso, y cómo puedo convertir caracteres de múltiples bytes?
Estoy usando Ruby 2.3.3. Además, obtengo:
"\".encoding #=> #<Encoding:utf-8>
"\¥"".encoding #=> #<Encoding:utf-8>
"\¥’".encoding #=> #<Encoding:utf-8>
Es este error de Ruby?
Respuestas
2 para la respuesta № 1Una barra invertida literal debe venir en último lugar. Desde el documentación: (énfasis añadido)
El caracter de barra invertida
se puede utilizar para escapar
^
o-
y de lo contrario se ignora a menos que aparezca al final de un rango o el final de lafrom_str
oto_str
:
"\abc".tr("\abc", "/def") #=> "\/de"
es equivalente a:
"\abc".tr("abc", "/def") #=> "\/de"
Versus:
"\abc".tr("abc\", "def/") #=> "/def"