Ruby 输出 Unicode 字符

50

我并非专业的Ruby开发人员,但我正在使用Capistrano进行PHP部署。我试图清理脚本的输出,并尝试像这篇博客中讨论的那样添加Unicode勾号

问题是,如果我执行以下操作:

checkmark = "\u2713"
puts checkmark

它输出"\u2713"而不是✓。

我已经在谷歌上搜索了,但就是找不到任何讨论这个的地方。

TLDR:如何putsprint Unicode符号U-2713?

编辑


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


更新 [4/8/2019] 在网站关闭的情况下添加参考图像。

Unicode Check Mark U+2713

6个回答

58

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 1.8.7,显然在1.9之前encode方法是不可用的。在1.9之前是如何完成的? - Jeremy Harris
1
@cillosis,我添加了Ruby 1.8.7兼容版本。你应该使用'\u2713'"\\u2713",因为在Ruby 1.8中"\u2713" == "u2713" - falsetru
1
哇!我先尝试了你的解决方案,但它没有起作用。然后改成单引号就可以了!谢谢 :) - Jeremy Harris
@sixty4bit,如果你想通知原帖作者,请提及原帖作者或在问题下发表评论。否则,原帖作者将不会收到通知。 - falsetru
1
@Lori, "\u{1f3e0}" ('1f3e0' == 127968.to_s(16)) - falsetru
显示剩余3条评论

23

在较新版本的 Ruby 中,您不需要强制编码。以下是一个使用 2.1.2 的示例:

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

请确保使用双引号!


2
这个关于确保使用双引号的注释真是救了我一命——否则我就要拔光头发,想弄清楚为什么这个不起作用! - Dasmowenator

18

falsetru的回答是不正确的。

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

这将把当前系统编码中的复选标记转换为UTF-8编码。(仅对默认为UTF-8的系统有效。)

正确答案是:

puts checkmark.force_encoding('utf-8')

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


5
作为补充说明,如果您想打印表情符号,则必须用大括号将其包围。
irb(main):001:0> "\u{1F600}"
=> ""

不错,但似乎不能与字符串插值一起使用 a=1F600; puts "\u{#{a}}" - builder-7000
@builder-7000 我找到了一种方法来实现它:a = '1F600'; puts a.to_i(16).chr('UTF-8')。输出结果为。 - Dmitry Barskov

0

如何在较新版本的 Ruby 中原样打印输出

checkmark = "\u2713" puts checkmark

这将会原样打印输出 \u2713


目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0

ERB 中同样适用,无需强制编码,完美运行,在 Ruby 2.3.0 上经过测试。

    <%= "\u00BD" %>

非常感激


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接