【问题标题】:Ruby Output Unicode CharacterRuby 输出 Unicode 字符
【发布时间】:2013-08-31 19:23:14
【问题描述】:

我不是 Ruby 开发人员,但我使用 Capistrano 进行 PHP 部署。我正在尝试清理脚本的输出并尝试添加unicode check mark,如this blog 中所述。

问题是如果我这样做:

checkmark = "\u2713"
puts checkmark

它输出“\u2713”而不是✓

我在 Google 上四处搜索,但找不到任何讨论这个问题的地方。

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

编辑


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


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

【问题讨论】:

    标签: ruby string unicode utf-8 ruby-1.8.7


    【解决方案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, "\u{1f3e0}" ('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> "\u{1F600}"
      => "?"
      

      【讨论】:

      • 不错,但似乎不适用于字符串插值a=1F600; puts "\u{#{a}}"
      【解决方案5】:

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

          <%= "\u00BD" %>
      

      非常感谢

      【讨论】:

        【解决方案6】:

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

        复选标记 = "\u2713" 打勾

        这应该按原样打印 \u2713

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2017-03-14
        • 2011-08-05
        • 2012-09-27
        • 2019-03-11
        • 1970-01-01
        相关资源
        最近更新 更多