Ruby 输出 Unicode 字符
Posted
技术标签:
【中文标题】Ruby 输出 Unicode 字符【英文标题】:Ruby Output Unicode Character 【发布时间】:2013-08-31 19:23:14 【问题描述】:我不是 Ruby 开发人员,但我使用 Capistrano 进行 php 部署。我正在尝试清理脚本的输出并尝试添加unicode check mark,如this blog 中所述。
问题是如果我这样做:
checkmark = "\u2713"
puts checkmark
它输出“\u2713”而不是✓
我在 Google 上四处搜索,但找不到任何讨论这个问题的地方。
TLDR:我如何 puts
或 print
unicode 复选标记 U-2713?
编辑
我在我的 Mac (OSX Lion) 上运行 Ruby 1.8.7,因此无法使用 encode
方法。我的 shell 是 iTerm2 中的 Bash。
更新 [2019 年 4 月 8 日] 添加了参考图片,以防网站出现故障。
【问题讨论】:
【参考方案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 1.8.7,显然encode
方法直到 1.9 才可用。 1.9之前是怎么做的?
@cilosis,我添加了 Ruby 1.8.7 兼容版本。您应该使用 '\u2713'
或 "\\u2713"
,因为在 ruby 1.8 中是 "\u2713" == "u2713"
。
嘭!我首先尝试了您的解决方案,但它不起作用。然后转到单引号,它起作用了!谢谢:)
我能够简单地执行checkmark = "\u2713".encode('utf-8'); puts checkmark
之类的操作,因此将编码保存到变量中。这在 Ruby 2.2.2 中适用于我。
@Lori, "\u1f3e0"
('1f3e0' == 127968.to_s(16)
)【参考方案2】:
falsetru 的回答不正确。
checkmark = "\u2713"
puts checkmark.encode('utf-8')
这会将复选标记从当前系统编码转码为 UTF-8 编码。 (这只适用于默认已经是 UTF-8 的系统。)
正确答案是:
puts checkmark.force_encoding('utf-8')
这会修改字符串的编码,而不修改任何字符序列。
【讨论】:
【参考方案3】:在较新版本的 Ruby 中,您不需要强制编码。这是2.1.2
的示例:
2.1.2 :002 > "\u00BD"
=> "½"
请确保使用双引号!
【讨论】:
这条关于确保使用双引号的评论救了我——我正忙着弄清楚为什么这不起作用!【参考方案4】:作为附加说明,如果你想打印一个表情符号,你必须用大括号括起来。
irb(main):001:0> "\u1F600"
=> "?"
【讨论】:
不错,但似乎不适用于字符串插值a=1F600; puts "\u#a"
【参考方案5】:
在 ERB 中与上述相同,不需要强制编码,完美运行,在 Ruby 2.3.0 测试
<%= "\u00BD" %>
非常感谢
【讨论】:
【参考方案6】:我们如何在新版本的 ruby 中按原样打印
复选标记 = "\u2713" 打勾
这应该按原样打印 \u2713
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Ruby 输出 Unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章
清理 URL slug 的 Unicode 字符串(Ruby/Rails)
ruby 更改Rails 3.2.13和4.0如何在JSONMonkey修补程序ActiveSupport中编码unicode以恢复to_json unicode字符编码。