Подтвердить что ты не робот

Рубиновый выходной символ Юникода

По профессии я не разработчик Ruby, но использую Capistrano для развертывания PHP. Я пытаюсь очистить вывод моего скрипта и пытаюсь добавить юникодную галочку, как описано в этом блоге.

Проблема в том, что если я это сделаю:

checkmark = "\u2713"
puts checkmark

Он выводит "\ u2713" вместо ✓

Я погуглил и просто не могу найти нигде, где это обсуждается.

TLDR: Как мне puts или print пометить юникодом U-2713?

EDIT


Я использую Ruby 1.8.7 на своем Mac (OSX Lion), поэтому не могу использовать метод encode. Моя оболочка - Bash в iTerm2.


ОБНОВЛЕНИЕ [8/4/2019] Добавлено ссылочное изображение на случай, если сайт когда-либо закроется.

Unicode Check Mark U+2713

4b9b3361

Ответ 1

В Ruby 1.9.x +

Используйте String#encode:

checkmark = "\u2713"
puts checkmark.encode('utf-8')

печатает

В Ruby 1.8.7

puts '\u2713'.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
✓

Ответ 2

неверный ответ falsetru.

checkmark = "\u2713"
puts checkmark.encode('utf-8')

Это перекодирует галочку с текущей системной кодировки на кодировку UTF-8. (Это работает только в системе, по умолчанию уже UTF-8.)

Правильный ответ:

puts checkmark.force_encoding('utf-8')

Это изменяет строковое кодирование без изменения последовательности символов.

Ответ 3

В новых версиях Ruby вам не нужно принудительно вводить кодировку. Вот пример с 2.1.2:

2.1.2 :002 > "\u00BD"
 => "½"

Просто убедитесь, что вы используете двойные кавычки!

Ответ 4

То же самое, что указано выше в ERB, не требуется принудительная кодировка, отлично работает, проверена на Ruby 2.3.0

    <%= "\u00BD" %>

Значительная оценка

Ответ 5

В качестве дополнительной заметки, если вы хотите напечатать эмодзи, вы должны заключить его в фигурные скобки.

irb(main):001:0> "\u{1F600}"
=> "😀"