2009-11-16 4 views
192

J'utilise Ruby 1.9.1 Rails application est Mon 2.3.4 pour gérer la saisie de textechar multi-octets invalide (US-ASCII) avec Rails et Ruby 1.9

Si je tente quelque chose comme (les guillemets à l'intérieur un aspect différent)

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 

que je dois à l'utilisateur les guillemets que les utilisateurs pourraient les entrée et je dois expliquer cela?

Des idées?

+0

Si votre code n'a pas de backticks dans Si vous êtes accusé d'utiliser des backticks, il se peut qu'il y ait des problèmes d'espacement/d'onglets/de retour à la ligne dans votre fichier. Essayez de le publier dans un espace vide StackOverflow par exemple, et SO va commencer à agir bizarrement. Supprimez les espaces et les onglets étranges et les nouvelles lignes. Encore une fois, il suffit de coller le code dans un espace vide et d'essayer de formater votre code pour la présentation est une façon de vous donner un indice. –

Répondre

6

Ces guillemets inclinés ne sont pas des caractères ASCII. Le message d'erreur est trompeur à propos de leur 'multi-octet'.

+2

Pourquoi est-ce trompeur? Ils * sont des caractères multi-octets. –

+4

Parce que ASCII ne définit aucun codage multi-octet. En ce qui concerne ASCII, ceux-ci sont charabia, qui se trouve être valide dans un codage connexe. – Novelocrat

685

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

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

Cela a fonctionné pour moi comme un charme.

+2

Hmm ......... ajouté cela au début du fichier, mais toujours le même message d'erreur. Aucune suggestion? –

+0

@ArtemKalinchuk Ajoutez-le directement sous '#!/ bin/env ruby' J'avais une ligne vide entre eux et ça ne marchait pas. – Thomas

+8

L'explication centrale peut être trouvée dans l'article @dalyons linked: les fichiers _source reçoivent un encodage US-ASCII, sauf indication contraire. Si vous placez un contenu non ASCII dans un littéral String sans changer l'encodage source, Ruby mourra avec cette erreur. Merci les gars, j'ai enfin compris :-) –

43

Si vous voulez ajouter des commentaires magiques sur tous les fichiers source d'un projet facilement, vous pouvez utiliser le magic_encoding joyau

sudo gem install magic_encoding 

alors il suffit d'appeler magic_encoding dans le terminal de la racine de votre application.

+0

Je pense qu'il est important de se souvenir de ce genre de détails, donc je n'utiliserais pas cette gemme pendant au moins quelques mois pour écrire # encoding: utf-8 manuellement. –

+0

ajoutant 'gem magic_encoding' à gemfile sur rails 2.3 & ruby ​​1.9 a aidé – Elmor

+0

cela ne s'intègre pas dans les tests de concombre. – Trip

6

Juste une note que de Ruby 2.0 il n'y a pas besoin d'ajouter # encoding: utf-8. UTF-8 est automatiquement détecté.

3

Cela a fonctionné pour moi:

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

Je veux juste ajouter ma solution:

J'utilise tréma allemand comme ö, ü, A et a obtenu la même erreur.
@Jarek Zmudzinski vient de vous dire comment cela fonctionne, mais voici la mienne:

Ajouter ce code au-dessus de votre contrôleur: # encoding: UTF-8
(par exemple utiliser un message flash avec trémas)

exemple de mon contrôleur:

# encoding: UTF-8 
class UserController < ApplicationController 

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

Questions connexes