Я пытаюсь преобразовать некоторые однобайтовые символы в многобайтовые символы, используя tr
.Многобайтовые символы и команда tr
Когда у меня есть только один символ преобразования, конверсионные работы:
"\\".tr('\\', '\')
# => "\"
, но если добавить еще несколько символов, символы не обнаружены:
"\\".tr("\\¥'", "\¥’")
# => "\\"
Почему, и как Можно ли конвертировать многобайтовые символы?
Я использую Ruby 2.3.3. Кроме того, я получаю:
"\\".encoding #=> #<Encoding:UTF-8>
"\\¥'".encoding #=> #<Encoding:UTF-8>
"\¥’".encoding #=> #<Encoding:UTF-8>
Является ли это ошибкой Ruby?
Вы уверены, что вы находитесь в режиме UTF-8? – tadman
Да. Я использую Ruby 2.3.3. Кроме того, кодировка «' '\\" .кодирование => # <Кодировка: UTF-8> irb (main): 007: 0> "\\ ¥ '". Encoding => # <Кодировка: UTF- 8> irb (main): 008: 0> "\ ¥ '". Encoding => # <Кодирование: UTF-8> '' ' – sawa
Это может быть ошибка в' tr', поэтому вы можете изучить с командой Ruby. Похоже, что он работает, если вы переместите символ обратной косой черты в конец набора в 'tr', поэтому, возможно, что-то во внутренней реализации путается им. – tadman