46

我不是 Ruby 开发人员,但我使用 Capistrano 进行 PHP 部署。我正在尝试清理脚本的输出,并尝试添加一个unicode 复选标记,如本博客所述。

问题是如果我这样做:

checkmark = "\u2713"
puts checkmark

它输出“\u2713”而不是✓</p>

我已经用谷歌搜索了,我只是找不到任何讨论这个的地方。

TLDR:我如何putsprintunicode 复选标记 U-2713?

编辑


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


更新[2019 年 4 月 8 日] 添加了参考图片,以防网站出现故障。

Unicode 复选标记 U+2713

4

6 回答 6

53

在 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') }
✓
于 2013-08-28T15:53:40.167 回答
18

falsetru 的回答是不正确的。

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

这会将复选标记从当前系统编码转码为 UTF-8 编码。(这只适用于默认已经是 UTF-8 的系统。)

正确答案是:

puts checkmark.force_encoding('utf-8')

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

于 2014-12-10T15:23:01.323 回答
17

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

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

只要确保你使用双引号!

于 2016-04-22T16:39:42.740 回答
3

作为附加说明,如果要打印表情符号,则必须用大括号将其包围。

irb(main):001:0> "\u{1F600}"
=> ""
于 2019-09-04T04:37:56.637 回答
0

我们如何在新版本的 ruby​​ 中按原样打印

复选标记 = "\u2713" 放置复选标记

这应该按原样打印 \u2713

于 2021-12-17T19:27:44.573 回答
0

与上面的 ERB 相同,不需要强制编码,完美运行,在 Ruby 2.3.0 测试

    <%= "\u00BD" %>

非常感谢

于 2016-07-07T17:56:19.353 回答