Eu estou tentando converter alguns caracteres de byte único em caracteres multi-byte usando tr
.
Quando eu tenho apenas um caractere para converter, a conversão funciona:
"\".tr("\", "\")
# => "\"
mas se eu adicionar mais alguns caracteres, os caracteres não serão detectados:
"\".tr("\¥"", "\¥’")
# => "\"
Por que isso e como posso converter caracteres de múltiplos bytes?
Eu estou usando o Ruby 2.3.3. Além disso, recebo:
"\".encoding #=> #<Encoding:utf-8>
"\¥"".encoding #=> #<Encoding:utf-8>
"\¥’".encoding #=> #<Encoding:utf-8>
É esse bug do Ruby?
Respostas:
2 para resposta № 1Uma barra invertida literal deve vir por último. De documentação: (enfase adicionada)
O caractere de barra invertida
pode ser usado para escapar
^
ou-
e é ignorado, a menos que apareça no final de um intervalo ou o fim dofrom_str
outo_str
:
"\abc".tr("\abc", "/def") #=> "\/de"
é equivalente a:
"\abc".tr("abc", "/def") #=> "\/de"
Versus:
"\abc".tr("abc\", "def/") #=> "/def"