我正在尝试使用tr
将一些单字节字符转换为多字节字符。
当我只有一个字符要转换时,转换有效:
"\\".tr('\\', '\')
# => "\"
但如果我添加更多字符,则不会检测到字符:
"\\".tr("\\¥'", "\¥’")
# => "\\"
为什么会这样,以及如何转换多字节字符?
我使用的是Ruby 2.3.3。另外,我得到:
"\\".encoding #=> #<Encoding:UTF-8>
"\\¥'".encoding #=> #<Encoding:UTF-8>
"\¥’".encoding #=> #<Encoding:UTF-8>
这是Ruby的错误吗?
答案 0 :(得分:3)
字面反斜杠必须持续到位。来自documentation :(强调添加)
反斜杠字符
\
可用于转义^
或-
,否则将被忽略,除非它出现在范围的末尾或结束from_str
或to_str
:
"\\abc".tr("\\abc", "/def") #=> "\\/de"
相当于:
"\\abc".tr("abc", "/def") #=> "\\/de"
对战:
"\\abc".tr("abc\\", "def/") #=> "/def"