web-dev-qa-db-fra.com

caractère 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 destinée à gérer la saisie de texte

Si j'essaie quelque chose comme (les guillemets à l'intérieur 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 pour que les utilisateurs puissent les saisir et je dois en rendre compte?

Des idées?

197
Tam

Avez-vous essayé d'ajouter un commentaire magique dans le script où vous utilisez des caractères non-ASCII? Il devrait aller en haut du script.

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

Cela a fonctionné pour moi comme un charme.

690
Jarek Zmudzinski

Si vous souhaitez ajouter facilement des commentaires magiques sur tous les fichiers sources d'un projet, vous pouvez utiliser le magic_encoding bijou

Sudo gem install magic_encoding

alors appelez simplement magic_encoding dans le terminal à partir de la racine de votre application.

43
Shamu

Je veux juste ajouter ma solution:

J'utilise des trémas allemands comme ö, ü, ä et j'ai la même erreur.
@ Jarek Zmudzinski vient de vous dire comment cela fonctionne, mais voici le mien:

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

exemple de mon contrôleur:

# encoding: UTF-8
class UserController < ApplicationController

Vous pouvez maintenant utiliser ö, ä, ü, ß, "", etc.

16
Ismoh

Juste une note qui à partir de Ruby 2.0 il n’est pas nécessaire d’ajouter # encoding: utf-8. UTF-8 est automatiquement détecté.

8
Nowaker

Ces guillemets en biais ne sont pas des caractères ASCII. Le message d'erreur est trompeur en ce qu'ils sont "multi-octets".

7
Phil Miller

Cela a fonctionné pour moi:

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