Ruby Output Unicode Character

2019-03-09 16:26发布

I'm not a Ruby dev by trade, but am using Capistrano for PHP deployments. I'm trying to cleanup the output of my script and am trying to add a unicode check mark as discussed in this blog.

The problem is if I do:

checkmark = "\u2713"
puts checkmark

It outputs "\u2713" instead of ✓

I've googled around and I just can't find anywhere that discusses this.

TLDR: How do I puts or print the unicode checkmark U-2713?

EDIT


I am running Ruby 1.8.7 on my Mac (OSX Lion) so cannot use the encode method. My shell is Bash in iTerm2.

4条回答
Root(大扎)
2楼-- · 2019-03-09 17:04

In Ruby 1.9.x+

Use String#encode:

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

prints

In Ruby 1.8.7

puts '\u2713'.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
✓
查看更多
Juvenile、少年°
3楼-- · 2019-03-09 17:06

In newer versions of Ruby, you don't need to enforce encoding. Here is an example with 2.1.2:

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

Just make sure you use double quotes!

查看更多
干净又极端
4楼-- · 2019-03-09 17:06

Same goes as above in ERB, no forced encoding required, works perfectly, tested at Ruby 2.3.0

    <%= "\u00BD" %>

Much appreciation

查看更多
放荡不羁爱自由
5楼-- · 2019-03-09 17:08

falsetru's answer is incorrect.

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

This transcodes the checkmark from the current system encoding to UTF-8 encoding. (That works only on a system whose default is already UTF-8.)

The correct answer is:

puts checkmark.force_encoding('utf-8')

This modifies the string's encoding, without modifying any character sequence.

查看更多
登录 后发表回答