Ruby输出Unicode字符

Jer*_*ris 39 ruby string unicode utf-8 ruby-1.8.7

我不是一个Ruby dev的交易,但我使用Capistrano进行PHP部署.我正在尝试清理脚本的输出,并尝试添加一个unicode复选标记,本博客中所述.

问题是如果我这样做:

checkmark = "\u2713"
puts checkmark
Run Code Online (Sandbox Code Playgroud)

它输出"\ u2713"而不是✓

我已经google了,我找不到任何讨论这个的地方.

TLDR:我如何putsprintunicode勾选U-2713?

编辑


我在我的Mac(OSX Lion)上运行Ruby 1.8.7,因此无法使用该encode方法.我的shell是iTerm2中的Bash.

fal*_*tru 44

在Ruby 1.9.x +中

用途String#encode:

checkmark = "\u2713"
puts checkmark.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

版画

?
Run Code Online (Sandbox Code Playgroud)

在Ruby 1.8.7中

puts '\u2713'.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
?
Run Code Online (Sandbox Code Playgroud)


zw9*_*963 17

falsetru的答案是不正确的.

checkmark = "\u2713"
puts checkmark.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

这会将当前系统编码的复选标记转码为UTF-8编码.(仅适用于默认为UTF-8的系统.)

正确答案是:

puts checkmark.force_encoding('utf-8')
Run Code Online (Sandbox Code Playgroud)

这会修改字符串的编码,而不会修改任何字符序列.

  • 我相信这应该是公认的答案. (3认同)

six*_*bit 14

在较新版本的Ruby中,您不需要强制执行编码.这是一个例子2.1.2:

2.1.2 :002 > "\u00BD"
 => "½"
Run Code Online (Sandbox Code Playgroud)

只要确保你使用双引号!

  • 这条关于确保使用双引号的评论救了我——我费尽心思试图找出为什么这不起作用! (2认同)

Blu*_*ber 5

作为补充说明,如果您想打印表情符号,则必须用大括号将其括起来。

irb(main):001:0> "\u{1F600}"
=> ""
Run Code Online (Sandbox Code Playgroud)