charte multi-octets invalide (US-ASCII) avec Rails et Ruby 1.9

J’utilise Ruby 1.9.1 avec Rails 2.3.4 Mon application est de gérer la saisie de texte

Si j’essaye quelque chose comme ça (les guillemets intérieurs sont différents)

text = "”“" 

Je reçois l’erreur suivante:

 #<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end 

Je dois utiliser ces guillemets car les utilisateurs pourraient les saisir et je dois en tenir compte?

Des idées?

Avez-vous essayé d’append un commentaire magique dans le script où vous utilisez des caractères non-ASCII? Il devrait aller au-dessus du script.

 #!/bin/env ruby # encoding: utf-8 

Cela a fonctionné pour moi comme un charme.

Si vous voulez append facilement des commentaires magiques sur tous les fichiers sources d’un projet, vous pouvez utiliser la gemme magic_encoding

 sudo gem install magic_encoding 

Il vous suffit ensuite d’appeler magic_encoding dans le terminal à partir de la racine de votre application.

Je veux juste append ma solution:

J’utilise les trémas allemands comme ö, ü, ä et j’ai la même erreur.
@Jarek Zmudzinski vient de vous dire comment ça marche, mais voici le mien:

Ajoutez ce code en haut de votre contrôleur: # encoding: UTF-8
(par exemple pour utiliser un message flash avec des trémas)

exemple de mon contrôleur:

 # encoding: UTF-8 class UserController < ApplicationController 

Maintenant, vous pouvez utiliser ö, ä, ü, ß, "", etc.

Ces doubles guillemets inclinés ne sont pas des caractères ASCII. Le message d’erreur est trompeur à propos de leur «multi-octets».

Juste une note à partir de Ruby 2.0, il n’y a pas besoin d’append # encoding: utf-8 . UTF-8 est automatiquement détecté.

Cela a fonctionné pour moi:

 $ export LC_ALL=en_US.UTF-8 $ export LANG=en_US.UTF-8