Ответ 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') }
✓
По профессии я не разработчик 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] Добавлено ссылочное изображение на случай, если сайт когда-либо закроется.
Используйте String#encode
:
checkmark = "\u2713"
puts checkmark.encode('utf-8')
печатает
✓
puts '\u2713'.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
✓
неверный ответ falsetru.
checkmark = "\u2713"
puts checkmark.encode('utf-8')
Это перекодирует галочку с текущей системной кодировки на кодировку UTF-8. (Это работает только в системе, по умолчанию уже UTF-8.)
Правильный ответ:
puts checkmark.force_encoding('utf-8')
Это изменяет строковое кодирование без изменения последовательности символов.
В новых версиях Ruby вам не нужно принудительно вводить кодировку. Вот пример с 2.1.2
:
2.1.2 :002 > "\u00BD"
=> "½"
Просто убедитесь, что вы используете двойные кавычки!
То же самое, что указано выше в ERB, не требуется принудительная кодировка, отлично работает, проверена на Ruby 2.3.0
<%= "\u00BD" %>
Значительная оценка
В качестве дополнительной заметки, если вы хотите напечатать эмодзи, вы должны заключить его в фигурные скобки.
irb(main):001:0> "\u{1F600}"
=> "😀"