/ /マルチバイト文字とtrコマンド - ルビ、文字列、マルチバイト

マルチバイト文字とtrコマンド - ルビ、文字列、マルチバイト

私はいくつかのシングルバイト文字をマルチバイト文字に変換しようとしています。 tr.

変換する文字が1つだけの場合、変換は機能します。

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

しかし、さらに文字を追加すると、文字は検出されません。

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

それはなぜですか、マルチバイト文字をどのように変換できますか?

私はRuby 2.3.3を使用しています。さらに、私は得る:

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

このRubyのバグですか?

回答:

回答№1は2

文字通りのバックスラッシュが最後に来なければなりません。から ドキュメンテーション:(強調が追加されました)

バックスラッシュ文字 エスケープするために使用することができます ^ または - そして 終了時に表示されない限り、無視されます の範囲または終わりの from_str または to_str

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

次のものと同等です。

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

対:

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