Ruby 多字节字符和tr命令

Ruby 多字节字符和tr命令,ruby,string,multibyte,Ruby,String,Multibyte,我正在尝试使用tr将一些单字节字符转换为多字节字符 当我只有一个字符要转换时,转换工作: "\\".tr('\\', '\') # => "\" 但如果我再添加一些字符,则不会检测到这些字符: "\\".tr("\\¥'", "\¥’") # => "\\" 为什么会这样?我如何转换多字节字符 我正在使用Ruby 2.3.3。此外,我得到: "\\".encoding #=> #<Encoding:UTF-8> "\\¥'".encoding #=> #&

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

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

"\\".tr('\\', '\')
# => "\"
但如果我再添加一些字符,则不会检测到这些字符:

"\\".tr("\\¥'", "\¥’")
# => "\\"
为什么会这样?我如何转换多字节字符

我正在使用Ruby 2.3.3。此外,我得到:

"\\".encoding #=> #<Encoding:UTF-8>
"\\¥'".encoding #=> #<Encoding:UTF-8>
"\¥’".encoding #=> #<Encoding:UTF-8>
“\\”。编码=>#
“\\”“”.编码\\=>#
“\¥””.编码#=>#

这是Ruby的bug吗?

文本反斜杠必须排在最后。来自:(强调添加)

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

相当于:

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

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

你确定你处于UTF-8模式吗?是的。我正在使用Ruby 2.3.3。另外,
“\\\”。encoding=>\irb(main):007:0>“\\\”。encoding=>\irb(main):008:0>“\\”。encoding=>
这可能是
tr
中的一个bug,因此您可能需要与Ruby团队一起调查。如果在
tr
中将反斜杠字符移到集合的末尾,它看起来会起作用,因此内部实现中的某些内容可能会被它弄糊涂。
"\\abc".tr("abc\\", "def/") #=> "/def"