多字节字符和tr命令

时间:2017-01-27 03:19:22

标签: ruby string multibyte

我正在尝试使用tr将一些单字节字符转换为多字节字符。

当我只有一个字符要转换时,转换有效:

"\\".tr('\\', '\')
# => "\"

但如果我添加更多字符,则不会检测到字符:

"\\".tr("\\¥'", "\¥’")
# => "\\"

为什么会这样,以及如何转换多字节字符?

我使用的是Ruby 2.3.3。另外,我得到:

"\\".encoding #=> #<Encoding:UTF-8>
"\\¥'".encoding #=> #<Encoding:UTF-8>
"\¥’".encoding #=> #<Encoding:UTF-8>

这是Ruby的错误吗?

1 个答案:

答案 0 :(得分:3)

字面反斜杠必须持续到位。来自documentation :(强调添加)

  

反斜杠字符\可用于转义^-,否则将被忽略,除非它出现在范围的末尾或结束from_strto_str

"\\abc".tr("\\abc", "/def") #=> "\\/de"

相当于:

"\\abc".tr("abc", "/def") #=> "\\/de"

对战:

"\\abc".tr("abc\\", "def/") #=> "/def"