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 № 1Ein 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 derfrom_str
oderto_str
:
"\abc".tr("\abc", "/def") #=> "\/de"
ist äquivalent zu:
"\abc".tr("abc", "/def") #=> "\/de"
Gegen:
"\abc".tr("abc\", "def/") #=> "/def"