web-dev-qa-db-fra.com

Caractère Unicode de sortie Ruby

Je ne suis pas un développeur Ruby de métier, mais j'utilise Capistrano pour les déploiements PHP. J'essaie de nettoyer la sortie de mon script et j'essaie d'ajouter un coche unicode comme indiqué dans ce blog .

Le problème est que si je le fais:

checkmark = "\u2713"
puts checkmark

Il génère "\ u2713" au lieu de ✓

J'ai cherché sur Google et je ne trouve aucun endroit pour en discuter. 

TLDR: Comment est-ce que je puts ou print la coche unicode U-2713?

MODIFIER


J'utilise Ruby 1.8.7 sur mon Mac (OSX Lion), je ne peux donc pas utiliser la méthode encode. Mon Shell est Bash dans iTerm2.

34
Jeremy Harris

En rubis 1.9.x +

Utilisez String#encode :

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

empreintes

En Ruby 1.8.7

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

la réponse de falsetru est incorrecte.

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

Ceci transcode la coche du codage actuel du système en codage UTF-8 . (Cela ne fonctionne que sur un système dont le défaut est déjà UTF-8.)

La bonne réponse est:

puts checkmark.force_encoding('utf-8')

Cela modifie le codage de la chaîne, sans modifier aucune séquence de caractères.

15
zw963

Dans les versions plus récentes de Ruby, il n'est pas nécessaire d'appliquer le codage. Voici un exemple avec 2.1.2:

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

Assurez-vous simplement que vous utilisez des guillemets doubles!

11
sixty4bit

Même chose que ci-dessus dans ERB, aucun codage forcé requis, fonctionne parfaitement, testé à Ruby 2.3.0

    <%= "\u00BD" %>

Beaucoup d'appréciation

0
crystallinering