/ / Mehrbytezeichen und tr-Befehl - Ruby, String, Multibyte

Multi-Byte-Zeichen und tr-Befehl - Ruby, String, Multibyte

Ich versuche, einige Einzelbyte-Zeichen in Mehrbyte-Zeichen umzuwandeln tr.

Wenn ich nur ein Zeichen zum Konvertieren habe, funktioniert die Konvertierung:

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

Wenn ich jedoch weitere Zeichen hinzufüge, werden die Zeichen nicht erkannt:

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

Warum ist das so und wie kann ich Multibyte-Zeichen konvertieren?

Ich benutze Ruby 2.3.3. Zusätzlich bekomme ich:

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

Ist das Rubys Fehler?

Antworten:

2 für die Antwort № 1

Ein wörtlicher Backslash muss als letzter kommen. Von dem Dokumentation: (Betonung hinzugefügt)

Der Backslash-Charakter kann verwendet werden, um zu entkommen ^ oder - und wird ansonsten ignoriert, es sei denn, es erscheint am Ende eines Bereichs oder des Endes der from_str oder to_str:

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

ist äquivalent zu:

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

Gegen:

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