web-dev-qa-db-ja.com

Ruby出力Unicode文字

私はRuby dev by tradeですが、CapistranoをPHPデプロイメントに使用しています。スクリプトの出力をクリーンアップしようとしています。 このブログ で説明されているように nicodeチェックマーク を追加します。

問題は私がそうする場合です:

checkmark = "\u2713"
puts checkmark

✓の代わりに「\ u2713」を出力します

私はグーグルで調べましたが、これについて議論しているところはどこにも見つかりません。

TLDR:ユニコードチェックマークU-2713をputsまたはprintする方法

[〜#〜] edit [〜#〜]


Mac(OSX Lion)でRuby 1.8.7)を実行しているため、encodeメソッドを使用できません。シェルはiTerm2のBashです。


[〜#〜] update [〜#〜][4/8/2019]サイトがダウンした場合に備えて参照画像を追加しました。

Unicode Check Mark U+2713

38
Jeremy Harris

In Ruby 1.9.x +

つかいます - String#encode

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

プリント

In Ruby 1.8.7

puts '\u2713'.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }
✓
44
falsetru

falsetruの答えは間違っています。

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

これにより、チェックマークが現在のシステムエンコーディングからUTF-8エンコーディングにトランスコードされます。 (これは、デフォルトがすでにUTF-8であるシステムでのみ機能します。)

正解は次のとおりです。

puts checkmark.force_encoding('utf-8')

これにより、文字シーケンスを変更せずに、文字列のエンコードが変更されます。

17
zw963

Rubyの新しいバージョンでは、エンコードを強制する必要はありません。 2.1.2の例を次に示します。

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

必ず二重引用符を使用してください!

14
sixty4bit

追加の注意事項として、絵文字を印刷する場合は、中括弧で囲む必要があります。

irb(main):001:0> "\u{1F600}"
=> "????"
0
Blubber

上記と同じERBでも、強制エンコーディングは不要で、完全に機能し、Ruby 2.3.0でテスト済み

    <%= "\u00BD" %>

多くの感謝

0
killscreenmike